最初の列が同じ場合のみ出力

最初の列が同じ場合のみ出力

入力する:

[USER@NOTEBOOK ~/proba] find . -type f | xargs -I "{}" md5sum "{}" | sort
18b17ef2e55f6fd2deb044943a8a769d  ./yes
2b00042f7481c7b056c4b410d28f33cf  ./tt.txt
2b00042f7481c7b056c4b410d28f33cf  ./tx.txt
698458eb994fafdf56c1f63295c942ad  ./laksjdasdff.txt
764efa883dda1e11db47671c4a3bbd9e  ./ize2.txt
764efa883dda1e11db47671c4a3bbd9e  ./ize3.txt
764efa883dda1e11db47671c4a3bbd9e  ./ize.txt
a787d6f5ce5deb6e2e4b004f95da5655  ./laksjdf.txt
[USER@NOTEBOOK ~/proba] 

出力:

[USER@NOTEBOOK ~/proba] find . -type f | xargs -I "{}" md5sum "{}" | sort | SOMEMAGIC
tt.txt tx.txt
ize2.txt ize3.txt ize.txt
[USER@NOTEBOOK ~/proba] 

したがって、md5sumが一致する場合にのみファイル名を出力する「SOMEMAGIC」が必要です(md5sumごとに1行)。 (これは重複排除スクリプトになります。)

答え1

この「魔法」を試してみてください:)

find . -type f | xargs -I "{}" md5sum "{}" | awk '{count[$1]=count[$1]" "$2}END{for(j in count) if( (split(count[j], A)) > 1) print count[j]}' | sed -e 's/\.\///g'

答え2

最初のスクリプトは、次のスクリプトの拡張です。セルゲイ・ロマコフ答えですが、コメントが少し長すぎます。それは食べ物を提供しますファイル名のスペース、各「名前」を参照してください。この方法は必要ありませんタイプステップ。

2番目のスクリプトはsort + awkを使用する別の方法ですが、最初の方法の配列処理はありません。もちろん、これが問題になると、入力順序は失われます(ただし、この問題はとにかくソートステップを使用するため問題ではありません)。

どちらの方法も使用されます。sed\x00フィールド区切り記号として導入され、空白処理が可能になりました。

方法1、awkの配列。

find . -type f | 
  xargs -I {} md5sum {} |
    sed 's/ [ *]/\x00/' | # "  "==text, " *"==binary
      awk -F"\x00" '{
             if( md5s[$1] == "" ) {sep=""} else {sep=FS} 
             md5s[$1]=md5s[$1] sep $2 }
        END{ for(md5 in md5s ) {
               if( (split(md5s[md5], names, FS)) > 1 ) {
                 sep="\""  
                 for( ix in names ) {
                   printf "%s%s", sep, names[ix]
                   sep="\" \"" }
                 print "\"" } } }'

方法2、ソート+ awk。

find . -type f | 
  xargs -I {} md5sum {} |
    sort |sed 's/ [ *]/\x00/' | # "  "==text, " *"==binary
      awk -F"\x00" '{
             if (pkey!=$1) { ct=-1; pkey=$1; pnam=$2 }
             else{if (++ct) { printf(" \"%s\"",$2) }
                  else { printf("%s\"%s\" \"%s\"",nl,pnam,$2)
                         nl="\n" } } }
        END{ print "" }' 

出力

"./tt.txt" "./tx.txt"
"./ize2.txt" "./ize3.txt" "./ize.txt"

関連情報