2013-03-03 136 views
0

如果N th字段中包含字符串s,bash中執行快速單行選擇以過濾掉標籤分隔文件中所有行的最佳方式是什麼?例如:在Unix/bash中刪除符合列條件的行

$ 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那樣,它排除沒有字符串的行是該列號中的子字符串。謝謝。

回答

2

因爲你是基於列想要排除,我會用awk

awk '$2 == "crop" { print $0 }' myfile 

$2說用柱2.爲了實現-V功能相比,使用!=而非==

您還可以使用正則表達式檢查,以檢查串:

awk '$2 ~ /crop/ { print $0 }' myfile 

正則表達式匹配也可以用!~否定。

+0

但是,這不檢查子字符右?我想查看是否在與列 – user248237dfsf 2013-03-03 21:10:48

+0

@ user248237dfsf對應的字符串中的某處出現'crop'請參閱我的編輯。 – 2013-03-03 21:12:13

+0

@ user248237dfsf您可以通過管道連接awk:'echo「abc」| awk「{print $ 0}」'。你不想在這種情況下,因爲這是一種浪費,但你當然可以做到。 – 2013-03-03 21:14:50