我想在 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
使用该函数的一种方法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
附加一个逗号 and 。a[u]
最后1
打印每一行file1
是否被修改。