入力 1:
1 s1
100 s100
90 s90
入力 2:
a 1
b 3
c 7
d 100
e 101
f 90
出力:
a 1
d 100
f 90
これができることはわかっjoin
ていますが、(1) これらの共通フィールドをソートする必要があります (2) 結合後、input1 から 2 番目の列を削除する必要があります。誰もがこれに対するより良い解決策を持っていますか?
を使用する 1 つの方法を次に示しawk
ます。
awk 'FNR==NR { a[$1]; next } $2 in a' file1 file2
結果:
a 1
d 100
f 90
This might work for you (GNU sed):
sed -r 's|(\S+).*|/\\<\1$/p|' input1 | sed -nf - input2
私が知る限り、awkはこれに適したソリューションですが、すでに提供されているので:以下がperlソリューションです。
> perl -F -lane '$H{$F[0]}=$F[1];END{%T=reverse(%H);foreach (values %H){if(exists($H{$_})){print $T{$_}." ".$_;}}}' file1 file2
a 1
d 100
f 90
要件に応じて、grep は次のようになります。
grep -wFf <(cut -d' ' -f1 input1) input2
出力:
a 1
d 100
f 90
grep は列に対応しておらず、可能な場合は喜んで一致することに注意してください。