2017-04-07 7 views
0

同じ行に同じのmd5sumと印刷のものを持つファイルを検索します。私は1つの例で説明し、同様に私はタイトルに書かれたものをやろうとしている

ツリーディレクトリ: (ABCDHFGが私のファイルです)

このコマンドで
dir0/ 
dir0/A //MD5sum equal MD5sum B 
dir0/C 
dir0/D // MD5sum equal MD5sum F G 
dir0/dir1/B // MD5sum equal MD5sum A 
dir0/dir1/H 
dir0/dir1/dir2/G //MD5sum equal MD5sum F D 
dir0/dir1/dir2/F //MD5sum equal MD5sum G D 

:私はのMD5sumを計算し、DIR0およびサブディレクトリ内のすべてのファイルを検索し

find dir0/ -type f -print0 | xargs -0 md5sum | sort | uniq -w32 --all-repeated=prepend | awk '{ print $2 }' 

は、ソート、ファイルのみを選択することは等しいとに分けグループ、パスのみのファイルを印刷します。

[OK]を、この作品、私はこの出力を持っている:

dir0/A  ] 
dir0/dir1/B ] first group 

dir0/D    ] 
dir0/dir1/dir2/F ] 
dir0/dir1/dir2/G ] second group 

は、どのように私は次のように出力を持つことができます(同じラインで同じのMD5sumを持つ各ファイルを、明らかに「第一、第二なし?。これを行うには...グループ」)

dir0/A dir0/dir1/B ] first group 
dir0/D dir0/dir1/dir2/F dir0/dir1/dir2/G ] second group 
+0

サンプル入力がなければ、確かに言うのは難しいですが、 'awk'を改行せずに出力したいのですか? awk '{print $ 2}' 'の代わりに' awk '{printf "%s" $ 2}' 'を試してください。 – miken32

答えて

1

最短の方法は、このようなパイプラインステップを追加することです:

awk 'BEGIN{RS=RS RS}{$1=$1}1' 

RS = RS RSは、レコードセパレータとしてAwkに"\n\n"を使用させるため、各ブロックを1つのレコードとして読み込みます。 FSフィールド区切り文字は改行を含む空白なので、改行する必要はありません。これは(OFSに入社、それは$1$2などから(現在はそれに改行を持っている)$0を再構築します意味し、

$1 = $1は本当に$1の値を変更しませんが、Awkのは、それが持っている可能性が考えていますデフォルトでは" "です)。

1は、すべてのレコードでAwkが$0(およびORS、まだ単一の改行です)を印刷します。

関連する問題