Comportamento inconsistente do separador de campos do espaço no awk

1

O script awk a seguir mostra como um espaço inicial ' ' é ignorado como um separador de campo, mas outros caracteres são tratados como um separador com um campo nulo $ 1 anterior.

Existe alguma maneira de tornar esse comportamento consistente para todos os valores do separador de campo?

echo -e " Data\tdlm\t\\t\\t\"  
for d in '^' ':' '"' 'x' '/' ' ' ;do
  echo "${d}1${d}2${d}" |awk -F"$d" '
       { printf "|%s|\t|%s|\t|%s|\t|%s|\t|%s|\n", $0, FS, $1, $2, $3; }'
done

A saída:

 Data   dlm     $1      $2      $3
|^1^2^| |^|     ||      |1|     |2|
|:1:2:| |:|     ||      |1|     |2|
|"1"2"| |"|     ||      |1|     |2|
|x1x2x| |x|     ||      |1|     |2|
|/1/2/| |/|     ||      |1|     |2|
| 1 2 | | |     |1|     |2|     ||
    
por Peter.O 20.06.2011 / 20:03

1 resposta

2

Defina FS como um regexp, FS = "[ \t]+" (que é 'espaço em branco'), e ele não irá mais despir espaços iniciais e finais. O awk apenas separa espaços em branco iniciais e finais quando FS=" " .

Eu não acho que é possível dizer ao awk para não fazer isso, quando FS=" " .

    
por 20.06.2011 / 20:10

Tags