Awk
在保持順序的同時刪除相鄰的重複行
我有一個文件,其中有一列名稱重複多次。我想將每個重複壓縮為一個,同時保留與其他同名重複不相鄰的任何其他同名重複。
例如我想把左邊轉到右邊:
Golgb1 Golgb1 Golgb1 Akna Golgb1 Spata20 Golgb1 Golgb1 Golgb1 Akna Akna Akna Akna Spata20 Spata20 Spata20 Golgb1 Golgb1 Golgb1 Akna Akna Akna
這是我一直在使用的:
perl -ne 'print if ++$k{$_}==1' file.txt > file2.txt
但是,這種方法只保留了左邊的一個代表(即Golb1和Akna不重複)。有沒有辦法為每個塊保留唯一名稱,同時保留在多個不相鄰塊中重複的名稱?
uniq
將為您執行此操作:$ uniq inputfile Golgb1 Akna Spata20 Golgb1 Akna
**
Awk
**解決方案:awk '$1 != name{ print }{ name = $1 }' file.txt
輸出:
Golgb1 Akna Spata20 Golgb1 Akna