Crie o awk e obtenha colunas

1

Eu tenho o próximo problema:

Veja as informações da estrutura:

0   PATRAC_1  False   Normal    Normal  3     Not configure

Temos sete colunas, sete valores, então, eu preciso pegar esses valores usando awk, no começo eu uso espaço como separador, então, se eu colocar print $1 , eu fico: "0", se eu colocar print $2 , recebo "PATRAC_1", etc.

Mas quando tento obter a coluna 7, recebo apenas: "Not", porque o espaço entre "not" e "configure"

Então, o que posso fazer para resolvê-lo?

    
por user3658319 26.06.2015 / 17:00

2 respostas

2

Por padrão, o awk considera qualquer seqüência de espaço em branco como um separador de coluna. Não é possível adivinhar que você deseja que a sétima coluna se estenda até o final da linha, incluindo espaço em branco incorporado, você precisa informá-la.

Como você tem quantidades variáveis de espaço em branco entre as colunas, mantenha a definição das colunas baseada em espaço em branco. Mas, em vez de usar $7 para a última coluna, use o texto da linha, menos as seis primeiras colunas.

awk '{
    last_column = $0;
    sub(/^[[:blank:]]*([^[:blank:]]+[[:blank:]]+){6}/, "", last_column);
    print last_column;
}'

Se você tiver uma versão antiga do awk que não suporta classes de caracteres, use [ \t] em vez de [[:blank:]] . Se você tem uma versão antiga do awk que não suporta chaves em expressões regulares, faça 6 cópias desse regexp.

    
por 27.06.2015 / 15:57
3

Se os seus dados estiverem em colunas fixas, você pode pedir ao awk para dividir essas larguras de colunas definindo FIELDWIDTHS . por exemplo:

awk '
 BEGIN{ FIELDWIDTHS="4 10 8 10 8 6 99" }
 { printf "1=%s 2=%s 7=%s\n", $1, $2, $7 }
'

1=0    2=PATRAC_1   7=Not configure     
    
por 26.06.2015 / 19:21

Tags