我有一个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)。
提前致谢。
答案 0 :(得分:3)
grep
是工具:
$ grep -v "|" file
a._testudineus anm
a_battery art
您当然可以使用awk
:
$ awk '!/\|/' file
a._testudineus anm
a_battery art
我会选择grep
方式,因为此工具专门针对以下内容创建:man grep
说print 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