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]
指定し、最初の要素をに割り当てます。中にある場合は、行の後にカンマを追加してください。最後に、各行が変更されたかどうかを印刷します。file1
b
b[1]
u
u
a
a[u]
1
file1