合并两个文件列

合并两个文件列

我想在 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 个字段,file2a[1st field]file1用逗号分割成数组b,并将第一个元素分配b[1]u。如果u在其中,则在该行后a附加一个逗号 and 。a[u]最后1打印每一行file1是否被修改。

相关内容