2014-02-19 201 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