posso fazer o awk cortar sua entrada de acordo com '\ n'?

3

todos sabemos que podemos obter as colunas de uma linha usando o awk, mas as colunas são divididas por espaços em branco:

cat FileName | awk ' { print $1,$2,$3 .... }'

mas e se quisermos dividir os arquivos de acordo com '\ n':
por exemplo, se tivermos este arquivo:

Hi 
Hello
Aloha

e queremos obter a segunda palavra 'Olá' usando 'awk', o que devemos fazer?

    
por Networker 28.05.2014 / 09:29

3 respostas

4

No awk, existem dois separadores principais: o separador de campos e o separador de registros. O separador de registros separa diferentes grupos de campos. Como você provavelmente pode adivinhar nesta descrição, o registro padrão é uma nova linha. Você pode acessar o índice de registro atual na variável NR .

awk 'NR==2 { print; exit }'

Você também pode escrever apenas awk NR==2 , mas o awk (já que você não disse para sair depois de encontrá-lo) continuará lealmente processando o restante do arquivo depois de atingir a linha 2, o que pode levar um longo tempo um arquivo grande. O exit diz ao awk para sair imediatamente após a impressão do registro 2.

    
por 28.05.2014 / 09:32
2

Dependendo do que você está tentando fazer aqui, você pode usar o modo "multi-line-record" do awk. De Gawk's manual:

If RS is set to the null string, then records are separated by blank lines. When RS is set to the null string, the newline character always acts as a field separator, in addition to whatever value FS may have.

Então, no seu caso, você pode obter a segunda linha assim:

awk '{ print $2 }' RS= FileName

Saída:

Hello
    
por 28.05.2014 / 13:03
1

Você também pode usar sed para imprimir apenas a segunda linha,

sed -n '2p' file

Ou:

sed '2!d;q' file

para que sed seja encerrado depois de ler e imprimir a segunda linha, para que não leia o restante do arquivo.

Ou:

head -n 2 file | tail -n 1
    
por 28.05.2014 / 09:35

Tags