私は持っています:
次のファイル 1:
sting_of_printable_characters*sting_of_printable_characters*sting_of_printable_characters*ALPHANUMERIC_PATTERN
次のファイル 2:
sting_of_printable_characters*ALPHANUMERIC_PATTERN
フィールド区切り文字はどこに*
あり、英数字モードは常に行の最後のフィールドです。
私は次のことを達成する方法を知りませんし、助けが必要です。
デフォルトでは、「ALPHANUMERIC_PATTERN」に基づいてこれら2つのファイルを「結合」して(コマンドを試しましたが、join
英数字キーでは機能しないようです)、両方のファイルに同じALPHANUMERIC_PATTERNが含まれている場合にのみ印刷する必要があります。
awk
私は処理効率のためにこれを使用することを好みますが、何でも非常に役立ちます。 (このファイルは大容量です。)
問題は、次のような出力を確認する必要があることです。
ALPHANUMERIC_PATTERN*stuff_from_file_1*stuff_from_file_2
ベストアンサー1
次のことを試すことがjoin
できます。
join -t\* \
<(sed 's/\(.*\)\(\*\)\(.*\)/\3\2\1/' file1 | sort -t\* -k1,1) \
<(sed 's/\(.*\)\(\*\)\(.*\)/\3\2\1/' file2 | sort -t\* -k1,1)
2 つのsed
s は最後のフィールドを行の先頭に移動します。
field1*field2*...field(N-1)*field(N)
~になる
field(N)*field1*field2*...*field(N-1)
その後、結果はstフィールドとstフィールドsort
に1
順番に適用されますjoin
(常に1
stフィールドにあります)。これにより、次の行が印刷されます。
field(N)*fields(1)to(N-1)*from*file1*fields(1)to(N-1)*from*file2
一時ファイルを使用してjoin
結果を次のように保存したい場合outfile
:
sed 's/\(.*\)\(\*\)\(.*\)/\3\2\1/' file1 | sort -t\* -k1,1 > sorted_1
sed 's/\(.*\)\(\*\)\(.*\)/\3\2\1/' file2 | sort -t\* -k1,1 > sorted_2
join -t\* sorted_{1,2} > outfile
rm -f sorted_{1,2}