我的 CVS 文件有 10 列,我想删除第二个字段 ($2) 的字符串以“同义词”开头的行。我试过这个:
awk '$2 ~ /^synonymous/ {next}'
但它不会打印出任何东西。
你需要告诉 awk 你想做什么。到目前为止,您只是告诉它跳过第二个字段以“同义词”开头的记录,但您还没有告诉 awk 对其余字段做任何事情。试试这个:
awk '$2 !~ /^synonymous/'
这就是说“如果第二个字段不以同义词开头,则调用打印记录的默认操作”。
next
跳过记录,但您的代码中没有任何内容可以打印任何内容。
您需要打印与模式不匹配的记录:
awk '$2 ~ /^synonymous/ {next} {print}'
这可以简化如下:
awk '$2 !~ /^synonymous/ {print}'
由于print
是默认命令,因此可以进一步简化为
awk '$2 !~ /^synonymous/'
(HT @Jotne。)
您需要打印不包含同义词的行, 1 执行 tric
awk '$2 ~ /^synonymous/ {next}1'
PS 解决方案 Ed Morton 发布的是最好的 :)