Mesclando duas colunas de arquivos

1

Eu quero adicionar 6 campo do arquivo2 no último campo do arquivo1, estou usando o seguinte comando, mas incapaz de obter saída.

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

Arquivo1:

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

Arquivo2:

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

O que eu quero receber:

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
    
por blaCkninJa 07.06.2016 / 12:11

2 respostas

2

Isso faz o trabalho:

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

O - no final é a entrada padrão que é canalizada do awk.

EDIT: Quando você precisa ter certeza de que os nomes de domínio correspondem nos arquivos, você pode fazer isso com join em vez de paste .

Por exemplo, assim:

sort File2 | awk '{print $1,",",$6}' | sed 's/ //g' | join -t ',' File1 -
    
por 07.06.2016 / 12:37
2

Uma maneira de usar a função 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

Ele salva o 6º campo de file2 em a[1st field] , em seguida, para cada linha de file1 , ele divide a vírgula na matriz b e atribui o primeiro elemento b[1] a u . Se u estiver em a , será anexada uma vírgula e a[u] à linha. O% final 1 imprime cada linha de file1 , tenha sido modificada ou não.

    
por 07.06.2016 / 17:18