A primeira linha de saída do awk não é o que eu espero

1

Estou tentando descobrir por que uma parte de um nome de arquivo desaparece.

No meu caso, criei três arquivos

$ ls
some-part-of-file.1  some-part-of-file.2  some-part-of-file.3

e quando eu uso o awk com FS = "-" , um deles está em branco.

$ ( echo some-part-of-file.1 ; echo some-part-of-file.2 ; echo some-part-of-file.3 ) | awk '{ FS = "-" ; print $0 " " $2}'
some-part-of-file.1
some-part-of-file.2 part
some-part-of-file.3 part

Por que some-part-of-file.1 $2 não imprime part como os outros?

    
por Sergey Gvozdetskiy 18.12.2013 / 16:03

1 resposta

10

Você obtém saída em branco para o primeiro registro, porque isso já foi lido e analisado quando você definiu FS .

Você deve definir o separador de campo antes de ler e analisar o registro de entrada. Então, ou

awk 'BEGIN{ FS = "-" }{print $2}'

ou

awk -F'-' '{print $2}'

Como alternativa, você pode forçar o awk a analisar novamente o registro atual depois de definir FS :

awk '{FS = "-"; $0 = $0; print $2}'

Em relação ao seu pipeline, grep não é necessário, awk também pode fazer essa parte:

ls | awk -F'-' '/some-part-of-file/{print $2}'
    
por 18.12.2013 / 16:10

Tags