2

2 つのファイルがあり、各ファイルにはファイル名の md5 チェックサムがあります。どちらも別のフォルダにあります。これらのファイルを貼り付けるとき、次のことを行うメカニズムを探しています。

$column 3 が $column 6 と一致する場合、これら 2 つだけを並べて出力します。

filename1 = md5_checksum filename2 = md5_checksum
filename3 = md5_checksum filename4 = md5_checksum
filename5 = md5_checksum filename6 = md5_checksum

希望の結果:

filename1 = md5_checksum filename6 = md5_checksum

したがって、次の出力を想像 (またはテスト) します。

md5 directoryA/* > checkA ; md5 directoryB/* > checkB
paste checkA checkB

私は言いたいです:「checkAを見てください。filename1は別の名前ですがcheckBにもあります」(同じチェックサム)

参考までに、私が試したこと:

awk > SIMILAR 'NR==FNR{ _[$4]=$4 next}{print $0, _[$4,$4] }' checkA checkB

($4 は両方のファイル checkA と checkB のフィールドです)


これが、私がやろうとしていることに関する最良の説明であると私が認識していることです。迅速に回答していただき、誠にありがとうございます。

# touch A/{fee,fie,foo,fum}
# touch B/{Bee,Bie,Boo,Bum}
# md5 B/* > checkB
# md5 A/* > checkA
# more checkA
MD5 (A/fee) = 2737b49252e2a4c0fe4c342e92b13285
MD5 (A/fie) = df8b712c4fe20a0df933819665770165
MD5 (A/foo) = 51ca4befb7cb5bd22766a33c73ffca5b
MD5 (A/fum) = a80b2c31cfc269e4aa2f48658b5349d9

# more checkB
# md5 B/*
MD5 (B/Bee) = b026324c6904b2a9cb4b88d6d61c81d1
MD5 (B/Bie) = 2737b49252e2a4c0fe4c342e92b13285
MD5 (B/Boo) = df8b712c4fe20a0df933819665770165
MD5 (B/Bum) = 51ca4befb7cb5bd22766a33c73ffca5b

ここで見ると、A のファイル foo (A/foo) は B/Bum に似ています。

出力を次のようにしたいと思います。

A/foo B/Bum = 51ca4befb7cb5bd22766a33c73ffca5b
A/fee B/Bie = 2737b49252e2a4c0fe4c342e92b13285
4

2 に答える 2

4

以下に基づいています。

私は言いたいです:「checkAを見てください。filename1は別の名前ですがcheckBにもあります」(同じチェックサム)

ファイル名とチェックサム値を持つ 2 つのファイルがある場合は、次のようなことを試すことができます。

awk -F'=' 'NR==FNR{a[$2]=$1;next} $2 in a{print a[$2],$1,FS,$2}' checkA checkB

テスト:

$ cat checkA
MD5 (A/fee) = 2737b49252e2a4c0fe4c342e92b13285
MD5 (A/fie) = df8b712c4fe20a0df933819665770165
MD5 (A/foo) = 51ca4befb7cb5bd22766a33c73ffca5b
MD5 (A/fum) = a80b2c31cfc269e4aa2f48658b5349d9

$ cat checkB
MD5 (B/Bee) = b026324c6904b2a9cb4b88d6d61c81d1
MD5 (B/Bie) = 2737b49252e2a4c0fe4c342e92b13285
MD5 (B/Boo) = df8b712c4fe20a0df933819665770165
MD5 (B/Bum) = 51ca4befb7cb5bd22766a33c73ffca5b

$ awk -F'=' 'NR==FNR {a[$2]=$1; next} $2 in a { print a[$2], $1, FS, $2}' checkA checkB
MD5 (A/fee)  MD5 (B/Bie)  =  2737b49252e2a4c0fe4c342e92b13285
MD5 (A/fie)  MD5 (B/Boo)  =  df8b712c4fe20a0df933819665770165
MD5 (A/foo)  MD5 (B/Bum)  =  51ca4befb7cb5bd22766a33c73ffca5b

アップデート:

gawk関数を使用して、目的の出力を取得するために使用できますgensub

$ gawk -F'=' 'NR==FNR {a[$2]=$1; next} $2 in a {print a[$2]=gensub(/.*\(([^)]+)\)/,"\\1","G",a[$2]), $1=gensub(/.*\(([^)]+)\)/,"\\1","G",$1), FS, $2}' checkA checkB
A/fee  B/Bie  =  2737b49252e2a4c0fe4c342e92b13285
A/fie  B/Boo  =  df8b712c4fe20a0df933819665770165
A/foo  B/Bum  =  51ca4befb7cb5bd22766a33c73ffca5b
于 2013-06-06T17:28:37.820 に答える
2
join -o 1.2,2.2,1.3,1.4 -j 4 <(sort -k4,4 checkA) <(sort -k4,4 checkB)
(A/fee) (B/Bie) = 2737b49252e2a4c0fe4c342e92b13285
(A/foo) (B/Bum) = 51ca4befb7cb5bd22766a33c73ffca5b
(A/fie) (B/Boo) = df8b712c4fe20a0df933819665770165

tr -d '()'括弧を取り除く必要がある場合は、パイプします。

于 2013-06-06T18:41:12.063 に答える