在Linux中将多行更改为带空格的单行

在Linux中将多行更改为带空格的单行

我有以下多行数据

username: joe
empid: 1111
status: resigned

username: tom
emid: 1234

username: kate
empid: 2222
status: resigned

我想要的是将数据放入其他文件中,如下所示

username: joe,empid: 1111,status: resigned
username: tom,empid: 1234
username: kate,empid: 2222,status: resigned

祝好,KJ

答案1

以下是较短的 perl 版本:

perl -000 -ne 's/\n+/,/g; s/,$//g; print "$_\n"' filename.txt

激活-000段落模式,其中多个连续的换行符定义一个输入记录。

答案2

我设法使用

perl -p -e 's/\n/,/' filename.txt | perl -p -e 's/,,/\n/g' | perl -p -e 's/,\Z/\n/g'

第一个命令用逗号替换换行符,第二个命令将换行符放回到两个换行符之前的位置,第三个命令删除最后一个逗号并将其替换为换行符。

可能可以用一个命令完成所有这些操作,但我对此不够熟悉perl。我在这里使用它的原因是它sed没有提供替换换行符的简单解决方案。

答案3

使用 gawk,

gawk '{s=$1 $2;for(i=3;i<NF;i+=2) {s=s "," $i $(i+1)}print s}' RS= IFS=":"  input.txt

但请注意,这会“吃掉”字段分隔符 (:) 后的空格。

答案4

您还可以使用tr

tr '\n' ',' filename.txt

相关内容