2つのファイル列のマージ

2つのファイル列のマージ

File1の最後のフィールドにFile2の6つのフィールドを追加したいと思います。次のコマンドを使用していますが、出力を取得できません。

awk 'FNR==NR{a[$1]=$6; next} {print $0,a[$1]}' File2 File1

ファイル1:

zehriscollection.co.uk,IPAddress,hqfmqxvm,[email protected],2015-06-06 16:34,home,8000,4,Professional Linux Based,paper_lantern,root,Hostname,1433590496,4212,8192000
zindagidesire.com,IPAddress,hgchcjhcj,[email protected],2015-08-19 18:16,home,8000,107,Professional Linux Based,paper_lantern,root,Hostname,1439990214,110126,8192000
zobasra.co.uk,IPAddress,egranius,"[email protected], [email protected]",2013-11-30 19:07,home,3072,4,Standard,x3,root,Hostname,1385820470,4208,3145728

ファイル2:

zehriscollection.co.uk        hqfmqxvm         Usage:  4.02M      Inodes:  275
zindagidesire.com             hgchcjhcj        Usage:  107.19M    Inodes:  4765
zobasra.co.uk                 egranius         Usage:  4.02M      Inodes:  390

私が欲しいもの:

zehriscollection.co.uk,IPAddress,hqfmqxvm,[email protected],2015-06-06 16:34,home,8000,4,Professional Linux Based,paper_lantern,root,Hostname,1433590496,4212,8192000,275
zindagidesire.com,IPAddress,hgchcjhcj,[email protected],2015-08-19 18:16,home,8000,107,Professional Linux Based,paper_lantern,root,Hostname,1439990214,110126,8192000,4765
zobasra.co.uk,IPAddress,egranius,"[email protected], [email protected]",2013-11-30 19:07,home,3072,4,Standard,x3,root,Hostname,1385820470,4208,3145728,390

答え1

これを行います。

awk '{print $6}' File2 | paste -d ',' File1 -

最後は-awk からパイプに渡される標準入力です。

編集:ファイルのドメイン名が一致することを確認する必要があるjoin場合paste

たとえば、

sort File2 | awk '{print $1,",",$6}' | sed 's/ //g' | join -t ',' File1 -

答え2

この機能を使用する1つの方法は次のとおりですsplit

awk 'FNR==NR{a[$1]=$6; next}
{split($0, b, ","); u=b[1]; if (u in a) {$0=$0","a[u]}}
1' file2 file1

各行の6番目のフィールドを保存し、コンマで区切って配列file2としてa[1st field]指定し、最初の要素をに割り当てます。中にある場合は、行の後にカンマを追加してください。最後に、各行が変更されたかどうかを印刷します。file1bb[1]uuaa[u]1file1

関連情報