Awk
當字元串出現在多行時,如何從文件中刪除行?
我有一個包含 2 列的文件,如下所示:
apple pear banana pizza spoon fork pizza plate sausage egg
如果一個單詞出現在多行上,我想刪除重複單詞出現的所有行,如您所見“pizza”出現兩次,因此應刪除 2 行,以下是所需的輸出:
apple pear spoon fork sausage egg
我知道使用:
awk '!seen[$1]++'
但是,這只會在字元串出現在一列中時刪除行,我需要一個命令來檢查兩列。我怎樣才能做到這一點?
一個基本的兩步方法是創建一個非唯一單詞列表,並將其傳遞給
grep -v
.對於第一部分,您可以使用
sort
anduniq -d
(在序列化單詞之後 - 也許使用tr
)或 - 如果您想繼續使用awk
,例如:awk -vRS='[ \t\n]' 'seen[$0]++' file
它將記錄拆分為空白並列印以前見過的記錄。所以
$ awk -vRS='[ \t\n]' 'seen[$0]++' file | grep -Fvf- file apple pear spoon fork sausage egg
嘗試使用以下命令
for i in `cat filename| perl -pne "s/ /\n/g"| sort| uniq`; do j=`grep -c $i p.txt`; if [[ $j -eq 2 ]]; then sr=`echo $i`; else sed -n '/'$i'/p' p.txt| sed -n '/'$sr'/!p'; fi; done| awk '{if (!seen[$0]++)print $0}'
輸出
apple pear sausage egg spoon fork