0

次のように2つのファイルがあるとします。基本的には2つのファイルをマージしたいのですが、filter.txtの2列目に基づいてmap.txtの行数を出力したいと思います(output.txtで期待される結果を参照してください)

cat > filter.txt
a    3
b    2
c    6

cat > map.txt
a    a001
a    a002
a    a003
a    a004
a    a005
a    a006
a    a007
a    a008
a    a009
a    a010
a    a011
a    a012
b    b01
b    b02
b    b03
b    b04
c    c01
c    c02
c    c03
c    c04
c    c05
c    c06
c    c07

while ループのようにこれを行うには多くの方法があることは知っていますが、何千ものレコードを扱っている場合、この結果を得るには awk コマンドの方が効率的だと思います。

output.txt:
a    a001
a    a002
a    a003
b    b01
b    b02
c    c01
c    c02
c    c03
c    c04
c    c05
c    c06

私はこのコマンドからそれを理解しようとしていました:

awk 'NR==FNR{a[$1]=$2; next} {if(a[b=$1]) {print $0}}' filter.txt map.txt

しかし、それは一致するすべての行を印刷しているだけであり、印刷する行数を制御する方法に本当にこだわっています:)

私はあなたの助けに感謝します!

4

2 に答える 2