Adicionando colunas de vários arquivos com nomes numerados

3

Eu tenho muitos arquivos nomeados assim: DOS1, DOS2, DOS3, DOS4, ..., DOS128. Cada arquivo contém quatro colunas (a primeira coluna é a mesma) com números, como este:

DOS1 é:

33 12 1 2
16 32 8 1
9  90 17 5
...

O DOS2 é:

33 1 2 1
16 3 4 3
9  1 1 1
...

Eu gostaria de somar a segunda, terceira e quarta coluna de arquivos DOSX especificados, por exemplo, DOS1 e DOS2, para obter DOS_sum:

33 13 3 3
16 35 12 4
9  91 18 6
...

Como posso fazer isso?

    
por Piotr 08.10.2017 / 12:08

1 resposta

3

com awk :

awk '{a[FNR]=;b[FNR]+=;c[FNR]+=;d[FNR]+=} END{for (i=1;i<=FNR;i++) print a[i], b[i], b[i], d[i]}' DOS1 DOS2 > DOS_sum

Mais claramente:

{
    a[FNR]=     # Keep the first column
    b[FNR]+=    # Sum the rest. FNR is the current line number 
    c[FNR]+=    # in the current file. So this accumulates
    d[FNR]+=    # the values of a given line number across files.
}
END {
    for (i=1; i<=FNR; i++) 
        print a[i], b[i], c[i], d[i]
}

Use a expansão de chave do bash para somar uma sequência de arquivos:

awk '{a[FNR]=;b[FNR]+=;c[FNR]+=;d[FNR]+=} END{for (i=1;i<=FNR;i++) print a[i], b[i], b[i], d[i]}' DOS{10..73}
    
por muru 08.10.2017 / 12:44