grepping / awking删除包含特定字符的整行

时间:2014-02-19 12:32:29

标签: awk grep

我有一个grep(可能是awk?)的问题。 我有以下数据(2列,制表符分隔)。

a._testudineus  anm
a_battery   art
a_capella_singing   act|psy
a_cappella_singing  act|psy

我想删除包含字符“|”

的所有LINES

例如,我想要的结果如下:

a._testudineus  anm
a_battery   art

是否有快速/高效的grep / awk可以帮助我解决这个问题? 数据非常大(约5GB)。

提前致谢。

2 个答案:

答案 0 :(得分:3)

grep是工具:

$ grep -v "|" file
a._testudineus  anm
a_battery   art

您当然可以使用awk

$ awk '!/\|/' file
a._testudineus  anm
a_battery   art

我会选择grep方式,因为此工具专门针对以下内容创建:man grepprint lines matching a pattern


实际上,让我们复制文件1000次并比较执行时间:

$ wc file
  4404   8808 101292 file

有趣的是,时间非常相似:

$ time grep -v "|" file
real    0m0.031s
user    0m0.000s
sys     0m0.012s

$ time awk '!/\|/' file
real    0m0.030s
user    0m0.005s
sys     0m0.010s

还有10000行:

$ wc file
  44404   88808 1021292 file

$ time grep -v "|" file
real    0m0.300s
user    0m0.028s
sys     0m0.068s

$ time awk '!/\|/' file
real    0m0.314s
user    0m0.009s
sys     0m0.063s

答案 1 :(得分:0)

只需添加一条sed线。

linux / unix下有很多文本处理工具。对于懒惰的人(像我一样),知道sed,awk,grep(也许是排序),可能会处理90%以上的问题。 :)

sed '/|/d' file