Como adicionar uma coluna de um arquivo à última coluna de outro arquivo usando o awk?

4

Eu quero adicionar a segunda coluna de file2 a file1 , que contém um número e um número desconhecido de colunas, tornando-se a última coluna de file1 . Com esse objetivo, tentei criar um file3 composto colando um file1 e somente a segunda coluna de file2 :

file1 :

col11  col12  col13  ...  col1n

file2 :

col21  col22  col23  ...  col2m

novo file1 ou file3 :

col11 col12  ...  col1n  col22

Estou usando o comando:

awk '{ print $0 > "file3"; getline<"file2"; print $2 > "file3" }' file1 &

mas os argumentos da col22 em vez de formar a última coluna do novo arquivo irão para uma nova linha.

Alguém pode me ajudar a encontrar e corrigir o erro ou também a encontrar uma solução mais eficaz?
Meu sistema operacional é o fedora12.

    
por gloria 11.11.2014 / 09:40

2 respostas

1

awk '{f1 = $0; getline<"file2"; print f1, $2}' < file1 > file3

O arquivo de saída terá o mesmo número de linhas que file1 , então a última coluna estará vazia para as últimas linhas se file2 for menor, e os últimos valores em file2 serão ignorados se for mais longo .

Alternativamente, como sugerido por Costas:

awk '{getline f1 <"file1" ; print f1,$2}' < file2 > file3

Dessa vez, file3 terá o mesmo número de linhas que file2 . Isso significa que a ordenação de colunas será afetada se file2 for maior que file1 .

Com:

awk '{print $2}' < file2 | paste file1 - > file3

file3 terá o mesmo número de linhas que o maior de file1 e file2 . Nenhum dado será descartado, mas como acima, se file2 for maior que file1 , as últimas linhas em file3 terão dados de file2 na primeira / segunda coluna.

    
por 11.11.2014 / 11:01
0

Tente

$ awk 'NR==FNR{a[NR]=$2;next}{print $0,a[FNR]}' file2 file1
col11 col12 col13 ... col1n col22

A parte {a[NR]=$2;next} será executada apenas para o primeiro arquivo da lista ( file2 ), e quando awk processar o segundo arquivo ( file1 ), imprimiremos a linha inteira de file1 e adicionaremos tabela elemento a[FNR] que contém o valor do segundo campo de file2 .

    
por 11.11.2014 / 09:56