awk 中空格的字段分隔符行为不一致

awk 中空格的字段分隔符行为不一致

以下 awk 脚本显示如何' '忽略前导空格作为字段分隔符,但将其他字符视为前面带有空 $1 字段的分隔符。

有没有某种方法可以使字段分隔符的所有值的行为保持一致?

echo -e " Data\tdlm\t\$1\t\$2\t\$3"  
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

输出:

 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|     ||

答案1

将 FS 设置为正则表达式FS = "[ \t]+"(即“空白”),它将不再去除前导和尾随空格。 awk 仅在 时去除前导和尾随空格FS=" "

我认为不可能告诉 awk 不要这样做,当FS=" ".

相关内容