3つの列を持つファイルがありますが、3番目の列に重複行をインポートしたいと思います。たとえば、次のようになります。
AAA = 342
BLABLABLA = 2
BBBx2 = 23
1+1 = 2
KOKOKO= 5
2x1 = 2
出力は次のようになります。
BLABLABLA = 2
1+1 = 2
2x1 = 2
sort
を使ってみましたが、重複したuniq
行を削除して印刷したいと思います。
答え1
興味がある限り最後列の場合は、sort
sumを使用してこれを実行できますuniq
。
$ sort -k3n test.txt | uniq -f2 -D
1+1 = 2
2x1 = 2
BLABLABLA = 2
ここでソートオプションを使用する-k3n
と、ファイルは3番目のフィールドから数字順にソートされますuniq
。
-f2 Skip the first two fields before checking for uniqueness
-D Print all the repeated lines
残念ながら、一意性を確認するフィールドの数を制御することはできません。確認する文字数を指定するために使用できますが、-w
これは関心のあるフィールドが固定幅の場合にのみ役立ちます。
また、末尾のスペースに注意してください。一意性を確認するテキストに含まれます。
答え2
ユニークを使用してください。
uniq -f 3 <file name>
答え3
@riciの答えは正しいです。しかし、これは-D
GNU拡張です。
これはawkソリューションです。一度実行されますが、前の行を保存します。
sort -k3n <file name> | awk 'a[$3]++{ if(a[$3]==2){ print b }; print $0}; {b=$0}'
答え4
gawk -F'= ' '{d[$2][a[$2]++]=$0} END{for (i in a) {if (a[i] > 1) for (j in d[i]) {print d[i][j]}}}'
説明する:
各行($ 0)に対して「=」で区切られた2番目のフィールド($ 2)を取得し、そのフィールドをハッシュ「a」のキーとして使用してフィールドの発生回数を計算し、そのフィールドを両方の次元として使用します。 。ディメンションハッシュ 'd'で、フィールドは現在の行($)の値を格納するための2番目のディメンションキーとしてハッシュ 'a'値を参照します。最後に、値が1より大きい(重複を意味する) 'a'のすべての要素を繰り返し、その値 'd'を印刷します。
注:この行はソートを必要としませんが、メモリを消費します。