2

我有一些awk用于解析 CSV 文件的脚本。我注意到,如果一个单元格是空的,awk只需移动到下一个单元格。这意味着,如果我要求它读取第 4 列,但该单元格为空,它会打印第 5 列中的数据,例如:

echo "1@2@3@@5" | awk -F "@*" '{print $4}'

我的预期结果是它不会打印任何内容,因为第 4 列是空的。

  • 为什么要awk跳过第 4 列?
  • 我怎样才能awk不忽略空列?
4

1 回答 1

8

问题不是你想的那样。awk 没有忽略空单元格;它将该行解析为 4 个字段而不是 5 个。

[me@home]$ echo "1@2@3@@5" | awk -F "@*" '{print NF}'
4

那是因为您将@*其用作字段分隔符,它允许一个或多个连续@的字段分隔符(@, @@, @@@, ... 都是有效的字段分隔符)。

尝试-F "@"改用。

[me@home]$ echo "1@2@3@@5" | awk -F "@" '{print NF}'
5
[me@home]$ echo "1@2@3@@5" | awk -F "@" '{print $4}'

[me@home]$ echo "1@2@3@@5" | awk -F "@" '{print $5}'
5
于 2012-04-19T14:57:51.493 回答