2014-02-19 159 views
1

我有一个grep的(可能是AWK?)问题,整条生产线。 我有以下数据(2列,制表符分隔)。grepping/awking删除包含特定字符

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)。

在此先感谢。

回答

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 
0

绝对添加一条sed线。

有Linux/Unix下的许多文字处理工具。对于懒惰的人(像我一样),知道sed,awk,grep(也许还可以),可能会处理90%以上的问题。 :)

sed '/|/d' file