我读代码它正在尝试使用 awk 将单个空行更改为双空行。但这对我不起作用。
awk ~NF<2{printf\~\n\~}{print}~ <contour.dat >contour1.dat
在我阅读了 awk 的教程之后,就像核因子,转义序列,我仍然对这段代码没有任何线索。这是我第一次使用awk。
我在 bash 中运行它。它给了我:
-bash: 2{printf~n~}{print}~: No such file or directory
正确的代码应该是什么?
先感谢您。
我的环境
GNU bash,版本 3.2.51(1)-release (x86_64-apple-darwin13) 版权所有 (C) 2007 Free Software Foundation, Inc.
awk 版本 20070501
答案1
awk ~NF<2{printf\~\n\~}{print}~
我认为如果您在 shell 中运行命令,这些波形符应该是双引号:
awk "NF<2{printf\"\n\"}{print}"
您收到的错误是因为 shell 将 视为<
重定向运算符,并将以下部分作为文件名。
或者更好的是,将 awk 脚本放在单引号中,这样您就不需要转义其中的引号:
awk 'NF<2{printf"\n"}{print}'
这将在任何少于两个字段的行之前打印一个额外的换行符。但这与空行不同,只有一个单词的行仍然会添加额外的空行。
也许检查是否有正好零个字段:
awk 'NF == 0 {printf "\n"} {print}'
或者如果该行完全为空:
awk '$0 == "" {printf "\n"} {print}'
但由于默认操作是 toprint $0
并且空字符串是假的,并且与空行printf "\n"
几乎相同,因此可以将其压缩为:print
awk '!$0; 1'