2

入力 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 番目の列を削除する必要があります。誰もがこれに対するより良い解決策を持っていますか?

4

4 に答える 4

5

を使用する 1 つの方法を次に示しawkます。

awk 'FNR==NR { a[$1]; next } $2 in a' file1 file2

結果:

a    1
d    100
f    90
于 2012-12-12T06:49:13.500 に答える
1

This might work for you (GNU sed):

sed -r 's|(\S+).*|/\\<\1$/p|' input1 | sed -nf - input2
于 2012-12-12T11:15:05.830 に答える
0

私が知る限り、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
于 2012-12-12T09:27:23.263 に答える
0

要件に応じて、grep は次のようになります。

grep -wFf <(cut -d' ' -f1 input1) input2

出力:

a    1
d    100
f    90

grep は列に対応しておらず、可能な場合は喜んで一致することに注意してください。

于 2012-12-12T07:59:27.887 に答える