-2

fileA複数の列を持つ行のリストが含まれているという要件があります。列の1つは、emaillistという名前emaillist[1,2,3,..]です。変数fileBに値を割り当てた別のファイルを定義しました。で定義されているを読み、emailist[1,2,3,..]読みfileAたいと思います。emailistfileB

ファイル A:

XXX1 YYY1 emailist1
XXX2 YYY2 emailist2

ファイル B:

emailist1=abcd@xyz.com 
emailist2=xyz@zbc.com

シェルスクリプト:

Read fileA

email = $3

emailist1これが私の課題です。 で定義された読み方fileBです。

4

2 に答える 2

3

join次のコマンドを使用します。

$ cat fileA
XXX1 YYY1 emailist1
XXX2 YYY2 emailist2

$ cat fileB
emailist1 abcd@xyz.com 
emailist2 xyz@zbc.com

$ join -1 3 -2 1 -o '1.1 1.2 2.2' <(sort fileA -k3,3) <(sort fileB)
XXX1 YYY1 abcd@xyz.com 
XXX2 YYY2 xyz@zbc.com

このjoinコマンドでは、最初にデータを並べ替える必要があったため、sortファイル化してからin ieでemaillist結合します。このオプションは、出力するフィールドをほぼ同じ方法で指定するために使用されます.column 3file 1column 1file 2-1 3 -2 1-ofileAfileB1.1 1.2 2.2

注:をlike=のスペースに変更します。fileBsed 's/=/ /' fileB

于 2013-01-01T16:35:44.693 に答える
1

fileB最初に読み取り、値を連想配列に追加する必要があります。次に、fileA読み取り時に 3 番目の列を配列の値に置き換えます。このロジックは、次の方法で簡単に実装できますawk

awk 'FNR==NR { sub(/=/," "); a[$1]=$2; next } $3 in a { $3=a[$3] }1' fileB fileA

結果:

XXX1 YYY1 abcd@xyz.com
XXX2 YYY2 xyz@zbc.com
于 2013-01-02T01:24:14.483 に答える