9

我的文件看起来像:

L   0   256 *   *   *   *   *
H   0   307 100.0   +   0   0
S   30  351 *   *   *   *   *
D   8   27  *   *   *   *   99.3    
C   11  1   *   *   *   *   *   

对于我的脚本,我想从使用 $1 的某些行开始 awk print $0

awk '{if ($1!="C") {print $0}  else if ($1!="D") {print $0}}'

但是,必须有一种方法可以将“C”和“D”组合成一个 IF 语句……对吧?

例如,如果我想搜索 == L,H,S 即...不是 C 或 D,我该如何解决这个问题?

4

3 回答 3

12

你现在的情况是不正确的,$1!="C"不能$1!="D"同时为假。因此,它将始终打印整个文件。

这将按照您的描述进行:

awk '{if ($1!="C" && $1!="D") {print $0}}'  file
于 2012-10-29T20:12:59.297 回答
7

使用 awk,您可以使用语法为特定模式提供规则

awk 'pattern {action}' file

有关模式的定义,请参见awk 手册页。在您的情况下,您可以使用正则表达式作为具有语法的模式

awk'/regular expression/ {action}' file

和一个适合您需要的基本正则表达式可能是

awk '/^[^CD]/ {print $0}' file

您实际上可以缩短为

awk '/^[^CD]/' file

正如评论中所建议的那样,因为{print $0}是默认操作。

于 2012-10-29T20:14:13.447 回答
3
awk '$1 ~ /[CD]/' file

awk '$1 ~ /[LHS]/' file

awk '$1 ~ /[^LHS]/' file

awk '$1 !~ /[LHS]/' file
于 2012-10-29T20:13:02.817 回答