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中刪除第二列。有沒有人有更好的解決方案。
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中刪除第二列。有沒有人有更好的解決方案。
下面是使用awk
一個辦法:
awk 'FNR==NR { a[$1]; next } $2 in a' file1 file2
結果:
a 1
d 100
f 90
根據您的要求,grep的可能會做:
grep -wFf <(cut -d' ' -f1 input1) input2
輸出:
a 1
d 100
f 90
請注意,grep不支持列,並且會很樂意地匹配它的位置。
據我所知,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
這可能爲你工作(GNU SED):
sed -r 's|(\S+).*|/\\<\1$/p|' input1 | sed -nf - input2