Erro no separador de campos Awk?

2

Esta é a maneira esperada para o separador de campo awk funcionar:

$ echo 'fooXbar' | awk 'BEGIN {FS="X"} {print $1}'
foo
$ echo 'fooXbar' | awk 'BEGIN {FS="X"} {print $2}'
bar
$ 

mas se o FS for "- | -" então as coisas ficam estranhas:

$ echo 'foo-|-bar' | awk 'BEGIN {FS="-|-"} {print $1}'
foo
$ echo 'foo-|-bar' | awk 'BEGIN {FS="-|-"} {print $2}'
|
$ echo 'foo-|-bar' | awk 'BEGIN {FS="-|-"} {print $3}'
bar
$ 

Por quê? Por que os $ 2 a "|" no segundo exemplo ??

ATUALIZAÇÃO:

$ echo 'foo-|-bar' | awk 'BEGIN {FS="-\|-"} {print $2}'
awk: warning: escape sequence '\|' treated as plain '|'
|
$ 
    
por gasko peter 23.02.2014 / 14:20

1 resposta

6

FS é um regex: o awk interpreta -|- como " - ou - ".

Use -\|- . Você precisará dobrar a barra invertida dentro do literal da string.

echo 'foo-|-bar' | awk 'BEGIN {FS="-\|-"} {print $1}'

ou

echo 'foo-|-bar' | awk -F '-\|-' '{print $2}'
    
por 23.02.2014 / 14:25

Tags