我试图找到正确的方法来实现这一点,从stdin读取并打印到stdout。我知道我可以使用squeeze(-s)删除多个相同类型的行,但我想留下两个换行符,而不只是一行。我也考虑过使用uniq,但我不确定如何使用uniq。我知道折叠也可以使用,但我找不到任何关于我想要的折叠版本的信息,折叠(1p)。
所以,如果我将文本作为输入:
A B C D
B C D E
我希望输出改为
A B C D
B C D E
答案 0 :(得分:3)
您可以像这样使用awk:
awk 'BEGIN{RS="";ORS="\n\n"}1' file
RS
是输入记录分隔符,ORS
是输出记录分隔符。
来自awk手册:
如果RS为null,则记录由包含换行符和一个或多个空行
的序列分隔
这意味着上面的命令将输入文本拆分为两个或多个空行,并再次使用两个换行符连接它们。
答案 1 :(得分:0)
关注awk
可能对您有帮助。
awk -v lines=$(wc -l < Input_file) 'FNR!=lines && NF{print $0 ORS ORS;next} NF' Input_file
<强> OR 强>
awk -v lines=$(wc -l < Input_file) 'FNR!=lines && NF{$0=$0 ORS ORS} NF' Input_file