Awk

在保持順序的同時刪除相鄰的重複行

  • June 27, 2018

我有一個文件,其中有一列名稱重複多次。我想將每個重複壓縮為一個,同時保留與其他同名重複不相鄰的任何其他同名重複。

例如我想把左邊轉到右邊:

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

引用自:https://unix.stackexchange.com/questions/439514