Combine o cabeçalho da coluna e imprima os valores da coluna usando awk

0

Eu tenho um dado no arquivo em colunas. Eu quero escrever um script, que exibe os dados da coluna correspondente ao título da coluna.

C-1 C-2 C-3 C-4 C-5 C-6 C-7 C-8 C-9
10  30  35  20  9   65  87  30  29
40  32  67  78  30  54  24  21  13
50  43  32  12  43  65  78  67  54

se o usuário escolher exibir a coluna C-8, a saída deve ser

C-8
30
21
67

Não sei como combinar o nome da coluna e imprimir a saída usando o awk.

Obrigado KJ

    
por KumarJohn 17.06.2015 / 12:51

3 respostas

1

Crie um script, por exemplo, chamado script.sh com isso:

awk -v COLT=$1 '
        NR==1 {
                for (i=1; i<=NF; i++) {
                        if ($i==COLT) {
                                title=i;
                                print $i;
                        }
                }
        }
        NR>1 {
                if (i=title) {
                        print $i;
                }
        }
' file

Em que file é o arquivo com os dados nas colunas.

Se você emitir script.sh C-8 , o resultado será:

C-8
30
21
67
    
por 17.06.2015 / 13:00
1

Sem awk , você pode usar o seguinte comando:

cut $FILE -f 'head -1 $FILE | tr "\t" "\n" | grep -n "^$COLUMNTITLE"'$' | cut -f 1 -d :'

Funciona somente se houver uma única coluna correspondente ao exato $COLUMNTITLE

    
por 17.06.2015 / 13:24
1

Tente com isso:

function proj() {
    awk -v c="$1" 'NR==1 {for (i=1; i<=NF; i++) if ($i==c) break} {print $i}' "$2"
}

Use como:

proj C-8 table.txt

Se você espera passar nomes de colunas que não estão presentes na tabela, você deve verificar isso: add i!=NF+1 before {print $i} , caso contrário, você obterá tantas linhas vazias quanto as linhas da tabela.

Você também pode colocá-lo em um arquivo separado usando uma função.

    
por 17.06.2015 / 13:47