2つのファイルをリンクするシェルスクリプト

2つのファイルをリンクするシェルスクリプト

私は2つのファイルの合計を取得し、shell script次のような結果を得るプログラムを書くのが好きです。AB

文書A:

user_a tel_a addr_a
user_b tel_b addr_b

文書B:

process_1 user_a
process_2 user_a
process_3 user_b

結果:

user_a process_1 tel_a addr_a
user_a process_2 tel_a addr_a
user_b process_3 tel_b addr_b

どうすればいいですか?awkそれとも別のものですか?

答え1

join...

join -1 2 -2 1 FileB FileA

出力

user_a process_1 tel_a addr_a
user_a process_2 tel_a addr_a
user_b process_3 tel_b addr_b

入力ファイルはキーフィールドでソートする必要があります。サンプルファイルはすでにソートされているため必要ありませんが、次のようにソートをマージできます。

join -1 2 -2 1 <(sort -k2 FileB) <(sort FileA)

答え2

joinとはどこでも利用できないのでpaste(たとえば、私のBusyBoxベースのシステムではありません)、要求に応じてawkを使用して実行する方法は次のとおりです。

awk 'BEGIN {
    while( (getline < "fileA") > 0) A[$1]=$2 OFS $3 # read fileA into the array A
    close("fileA")
  } {
    print $2, $1, A[$2]
  }' fileB

関連情報