adicionando valores numéricos de duas colunas no arquivo de texto

3

Eu tenho dois arquivos de texto cujo conteúdo é o seguinte:

data_1:473428800.0 0 0.000004 1.00 WETZTROPMCIL   #4 columns, several lines
       473429100.0 0 0.000002 1.00 WETZTROPMCIL

data_2:473428800.0 0 2.100000 1.00 DRYTROPMCIL    #4 columns, several lines
       473429100.0 0 2.200000 1.00 DRYTROPMCIL

Preciso adicionar cada linha da terceira coluna de um arquivo à respectiva linha da terceira coluna do outro arquivo e substituí-las pela terceira coluna de dados_1, em um novo arquivo, conforme abaixo.

merged_data= data_1:473428800.0 0 2.1000004 1.00 WETZTROPMCIL   #4 columns, several lines
                    473429100.0 0 2.2000002 1.00 WETZTROPMCIL
    
por deepblue_86 09.08.2016 / 16:54

2 respostas

5

Tente:

paste data_1 data_2 | awk '{=sprintf("%.10g", +); NF=5; print}'

Notas:

  • Eu vejo 5 campos por arquivo, não 4, conforme declarado no OP.

  • paste irá mesclar linhas dos dois arquivos.

  • awk verá linhas com 10 campos cada. NF=5 diz para manter apenas os 5 primeiros, que são de data_1 .

  • O flutuante é impresso com o formato [s]printf do %.10f . Isso pode ou não estar ok. Veja man 3 printf .

  • Se a classificação for necessária, isso pode ser feito com a substituição do processo:

    paste <(sort [args] data_1) <(sort [args] data_2) | awk ...
    
por Matei David 09.08.2016 / 17:45
2

O método de Matei deve garantir que as linhas estejam na mesma ordem. Portanto, o seguinte caminho será mais seguro.

sort -k 1n data_1 > data_1_sort
sort -k 1n data_2 > data_2_sort
paste data_1_sort data_2_sort| awk '{=sprintf("%.10g", +); NF=5; print}'
    
por Shicheng Guo 09.08.2016 / 19:08

Tags