temos 2 arquivos com cabeçalhos desordenados

0

Existem 2 arquivos que dizem Arquivo1 e Arquivo2

  • O arquivo1 tem apenas cabeçalhos como

    Field2 Field1 Field3
    

e

  • O File2 tem cabeçalhos e dados também

    Field3 Field2 Field1
    ABC    DEF    GHI
    JKL    MNO    PQRS
    

Eu tenho que sincronizar dois campos de cabeçalhos em arquivos como

Arquivo1.txt

Field1 Field2 Field3

Arquivo2.txt

Field1 Field2 Field3
GHI    DEF    ABC
PQRS   MNO    JKL
    
por Raj 10.08.2017 / 14:51

2 respostas

0

awk '
    NR==FNR {
        # read the first file, save the desired field order
        n = split($0, field_order)
        next
    } 
    FNR==1 {
        # read the first line of the second file
        # store the mapping of field name to existing column number
        n = split($0, header)
        for (i=1; i<=n; i++)
            current_field_order[header[i]] = i
    }
    {
        # output the fields in the desired order
        for (i=1; i<=n; i++)
            printf "%s%s", $(current_field_order[field_order[i]]), OFS
        print ""
    }
' file1 file2 

Isso destruirá o alinhamento da coluna. Você pode canalizar a saída em | column -t para torná-lo bonito.

    
por 10.08.2017 / 16:37
0

Usando awk para dividir o arquivo2 em vários arquivos correspondentes por valor de cabeçalho, cole-os completamente com o pedido desejado salvo no arquivo1 somente como cabeçalho.

awk 'BEGIN{getline;h1=$1;h2=$2;h3=$3}
          {print $1>h1; print $2>h2; print $3>h3}
' file2

Em seguida, faça paste do cabeçalho do arquivo1.

paste 'cat file1'
DEF     GHI     ABC
MNO     PQRS    JKL

se você deseja colar na ordem de cabeçalho (não com base na ordem de cabeçalho no arquivo1), você pode fazer o seguinte.

paste Field{1..3}
GHI     DEF     ABC
PQRS    MNO     JKL
    
por 10.08.2017 / 18:16