bash/sed/awk/etc 删除每个其他换行符

bash/sed/awk/etc 删除每个其他换行符

bash 命令输出以下内容:

Runtime Name: vmhba2:C0:T3:L14
Group State: active
Runtime Name: vmhba3:C0:T0:L14
Group State: active unoptimized
Runtime Name: vmhba2:C0:T1:L14
Group State: active unoptimized
Runtime Name: vmhba3:C0:T3:L14
Group State: active
Runtime Name: vmhba2:C0:T2:L14
Group State: active

我想将它通过管道传输到某个东西以使其看起来像这样:

Runtime Name: vmhba2:C0:T1:L14 Group State: active 
Runtime Name: vmhba3:C0:T3:L14 Group State: active unoptimized
Runtime Name: vmhba2:C0:T2:L14 Group State: active
[...]

即删除每个其他换行符

我试过了... |tr "\nGroup" " ",但它删除了所有换行符,还吃掉了一些其他字母。谢谢

答案1

现在无法测试,但是

... | paste - - 

应该这样做

答案2

一种可能性是:

awk 'ORS=NR%2?" ":"\n"'

如果行号可以被 2 整除,则以新行结束,否则以空格结束。

(测试平台:CentOS 6、GNU Awk 3.1.7)

使用 sed(参见解释):

sed ':a;N;$!ba;s/\nGroup/ Group/g'

进一步阅读:

答案3

如果要使用sed,则没有必要将整个文件读入内存。您可以像这样合并每隔一行:

sed 'N;s/\n/ /' inputfile

使用任何你喜欢的字符代替空格。

以下是使用 awk 的另一种方法:

awk '{printf "%s", $0; if (getline) print " " $0; else printf "\n"}' inputfile

处理if/else文件中有奇数行的情况。如果没有它,奇数行将被打印两次。否则,为了进行比较,您可以执行以下操作:

awk '{printf "%s", $0; getline; print " " $0}'

答案4

这在 Linux 上对我有用:

... | tr "\\n" " "

这将替换换行符的空格;你必须转义换行符以使事情正常工作。

相关内容