ファイル内の2つのリンクされた重複行を見つけるには?
たとえば、このファイルには2つのリンクされた繰り返し行しかありません。
OQ-63/ECC/Global/MES/CZ/adWerum-CZ-Adapter
OQ-63/ECC/Global/MES/54/ECC-MRP-S05
OQ-63/ECC/Global/MES/CZ/adWerum-CZ-Adapter
OQ-63/ECC/Global/MES/54/ECC-MRP-S05.ear
OQ-63/ECC/Global/MES/CZ/adWerum-CZ-Adapter <--
OQ-63/ECC/Global/MES/CZ/adWerum-CZ-Adapter <--
OQ-63/ECC/Global/MES/54/ECC-MRP-S05.xml
答え1
Uniqで十分です。
$ cat c.txt
OQ-63/ECC/Global/MES/CZ/adWerum-CZ-Adapter
OQ-63/ECC/Global/MES/54/ECC-MRP-S05
OQ-63/ECC/Global/MES/CZ/adWerum-CZ-Adapter
OQ-63/ECC/Global/MES/54/ECC-MRP-S05.ear
OQ-63/ECC/Global/MES/CZ/adWerum-CZ-Adapter
OQ-63/ECC/Global/MES/CZ/adWerum-CZ-Adapter
OQ-63/ECC/Global/MES/54/ECC-MRP-S05.xml
$ uniq -D c.txt
OQ-63/ECC/Global/MES/CZ/adWerum-CZ-Adapter
OQ-63/ECC/Global/MES/CZ/adWerum-CZ-Adapter
$ uniq c.txt
OQ-63/ECC/Global/MES/CZ/adWerum-CZ-Adapter
OQ-63/ECC/Global/MES/54/ECC-MRP-S05
OQ-63/ECC/Global/MES/CZ/adWerum-CZ-Adapter
OQ-63/ECC/Global/MES/54/ECC-MRP-S05.ear
OQ-63/ECC/Global/MES/CZ/adWerum-CZ-Adapter
OQ-63/ECC/Global/MES/54/ECC-MRP-S05.xml
デフォルトでは、 uniq は入力ファイルの隣接行をチェックします。したがって、ソートされていないファイルの場合(たとえば、あなたの場合)、uniqはあなたが望むことをします。
uniq -dおよび-uオプションにも興味があるかもしれません。詳細については、マニュアルページを参照してください(-dは2つの重複行のうち1つのみを印刷し、-uはuniq行のみを印刷 - 両方の重複エントリを削除します)。
答え2
別のオプション:
grep -zPo '\n(.+)\n\1\n'
これにより、追加の調整(追加スペースを許可するなど)を追加できます。
アップグレード:@thorが指摘したように、ファイルの先頭で重複をキャプチャしません。この状況を解決するには、次を使用します。
grep -zPo '(?<!.)(.+\n)\1'
答え3
AWKのもう一つの選択肢:
awk 'x !~ $0; {x=$0}'
これにより、uniqと同じ動作が得られますが、列単位でも同様です。
awk -F/ 'x !~ $2; {x=$2}'
-F
フィールド区切り文字を設定します。
これにより、2番目のフィールドが前の行の2番目のフィールドと連続して同じ行を削除できます。
$ cat c.txt
line/one
line/two
otherline/two
yetanotherline/two
line/three
$ awk -F/ 'x !~ $2; {x=$2}' c.txt
line/one
line/two
line/three