mesclar arquivos e obter valores de coluna com base no campo id

3
bash-3.2$ cat sample.log sample.log.1 sample.log.2
ID COL1 COL2 COL4
1  col1 col2 col4
2  c1   c2   c4
3  co1  co2  co4

ID COL3 COL1
1  col3 col1
2  c3   c1
3  co3  co1

ID COL1 COL2 COL3
1  col1 col2 col3
2  c1  c2   c3
3  co1  co2  co3

Eu preciso escrever um script awk de modo que ele forneça os valores das colunas para um ID específico, como uma consulta de seleção em várias tabelas no banco de dados.

me da campos col1 col2 col2 e col3 para id 1 e não deve duplicar o resultado. significando que o resultado deve ser como

The result should be
ID COL1 COL2 COL3
1  col1 col2 col3

mas não

The result should be
ID COL1 COL2 COL3 COL3
1  col1 col2 col3 col3

Até mesmo uma sugestão também é boa.

awk ' BEGIN { while ( (getline line < "sample.log") > 0 ) {ids[substr(line,1,index(line," ")-1)];} } { // get the column values here based on the stored id's .. } ' sample.log sample.log.1 sample.log.2

Estou tentando fazer algo parecido acima. Não tenho certeza se é uma boa ideia.

    
por don_crissti 17.02.2012 / 17:17

1 resposta

3

Você pode usar o comando join para executar esta tarefa:

join -1 1 -2 1 sample.log sample.log.1 -o 1.1,1.2,1.3,2.2

A saída será 'espaço único' separada, mas você pode usar o awk para reformatar o alinhamento da coluna.

Observe que os arquivos de entrada join devem ser classificados.

    
por 17.02.2012 / 18:00