2

我的 CVS 文件有 10 列,我想删除第二个字段 ($2) 的字符串以“同义词”开头的行。我试过这个:

awk '$2 ~ /^synonymous/ {next}'

但它不会打印出任何东西。

4

3 回答 3

4

你需要告诉 awk 你想做什么。到目前为止,您只是告诉它跳过第二个字段以“同义词”开头的记录,但您还没有告诉 awk 对其余字段做任何事情。试试这个:

awk '$2 !~ /^synonymous/'

这就是说“如果第二个字段不以同义词开头,则调用打印记录的默认操作”。

于 2013-08-19T18:47:21.770 回答
3

next跳过记录,但您的代码中没有任何内容可以打印任何内容。

您需要打印与模式不匹配的记录:

awk '$2 ~ /^synonymous/ {next} {print}'

这可以简化如下:

awk '$2 !~ /^synonymous/ {print}'

由于print是默认命令,因此可以进一步简化为

awk '$2 !~ /^synonymous/'

(HT @Jotne。)

于 2013-08-19T18:44:46.063 回答
2

您需要打印不包含同义词的行, 1 执行 tric

awk '$2 ~ /^synonymous/ {next}1'

PS 解决方案 Ed Morton 发布的是最好的 :)

于 2013-08-19T18:47:07.340 回答