我有一些awk
用于解析 CSV 文件的脚本。我注意到,如果一个单元格是空的,awk
只需移动到下一个单元格。这意味着,如果我要求它读取第 4 列,但该单元格为空,它会打印第 5 列中的数据,例如:
echo "1@2@3@@5" | awk -F "@*" '{print $4}'
我的预期结果是它不会打印任何内容,因为第 4 列是空的。
- 为什么要
awk
跳过第 4 列? - 我怎样才能
awk
不忽略空列?
问题不是你想的那样。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