在Unix/bash中删除符合列条件的行
在bash中,如何用一句简单的命令快速过滤掉一个以制表符分隔的文件中,如果第N
列包含字符串s
的所有行?举个例子:
$ cat myfile
A B_crop C
A X_mock D
$ cat myfile | filter -V -c 2 -s "crop"
A X_mock D
这个假想的命令filter
接受一个列号(从1开始的)-c
和一个字符串-s
,只保留在指定列中包含这个字符串的行。如果加上-V
参数,就像grep
一样,排除那些在该列中没有这个字符串的行。谢谢。
1 个回答
3
因为你想根据某一列来排除一些内容,所以我建议使用 awk
:
awk '$2 == "crop" { print $0 }' myfile
这里的 $2
是指用第二列进行比较。要实现 -V
的功能,可以用 !=
来代替 ==
。
你还可以使用正则表达式来检查子字符串:
awk '$2 ~ /crop/ { print $0 }' myfile
正则匹配也可以用 !~
来表示否定。