使用 awk 将单空行更改为双空行

使用 awk 将单空行更改为双空行

我读代码它正在尝试使用 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'

相关内容