AWK 命令忽略为空行添加以“\n”结尾的换行符并在一行中打印

AWK 命令忽略为空行添加以“\n”结尾的换行符并在一行中打印

当我使用以下命令时,它会添加\n到所有行,但会跳过空白行。

awk 'NF {sub(/\r/, ""); printf "%s\\n",$0;}'

示例: 输入:

George Washington, 1789-1797

John Adams, 1797-1801
Thomas Jefferson, 1801-1809

输出:

George Washington, 1789-1797\nJohn Adams, 1797-1801\nThomas Jefferson, 1801-1809\n

预期输出:与\n\n

George Washington, 1789-1797\n\nJohn Adams, 1797-1801\nThomas Jefferson, 1801-1809\n

答案1

NF块之前的条件具体printf讲述awk 跳过空行。如果你不想让它这样做,那就不要告诉它这样做。

$ awk '{sub(/\r/, ""); printf "%s\\n",$0}' file
George Washington, 1789-1797\n\nJohn Adams, 1797-1801\nThomas Jefferson, 1801-1809\n$

顺便说一句,如果 的sub()目的是删除 DOS 行结尾,那么应该改为sub(/\r$/, "")而不是sub(/\r/, "")这样,因此您只删除\r位于行结尾的 s。

相关内容