ar análise de dados: campos (palavras) separados por espaços em branco

2

Estou usando sed no Linux, tentando corresponder linhas de dados com três campos, separados por tabulação (mas a separação pode ser qualquer espaço em branco), como em:

 12.3 0a 1b
 15.5 0v 1h
 17.7 5k 3c

; agora estou usando isso:

sed -n 's/^\([^[:blank:]]*\)[[:blank:]]*\([^[:blank:]]*\)[[:blank:]]*\([^[:blank:]]*\)/\t\t/p' mydata.txt

... então eu sou capaz de extrair e manipular (no exemplo, apenas inversão de posição) campos individuais via , , .

Existe uma maneira melhor de especificar isso?

Felicidades!

    
por sdaau 28.11.2011 / 19:36

1 resposta

4

Um exemplo trivial no awk para sugerir o que pode ser feito

awk '{print $2 $1 $3}' < input_file.txt

simplesmente reorganiza os dois primeiros campos enquanto imprime os três em todas as linhas.

Para reorganizar essas linhas tem exatamente três campos, preserve qualquer um que comece com # (ou seja, comente em idiomas semelhantes a sh) e exclua todos os outros

awk '/^#/{print $0;next} NF==3{print $2 $1 $3;next} {}' < input_file.txt

A maioria dos sistemas unix tem uma página man do awk bastante completa.

O importante para os seus propósitos aqui é que os campos são acessíveis com $1 , $2 , ..., onde "campo" é definido como strings de material separados por FS (isto é, o separador de campos), cujo padrão é para (um espaço).

    
por 28.11.2011 / 20:26

Tags