使用sed进行数据转换

Tyl*_*r D 2 perl awk sed

我有一个像这样的文件:

A
B
C
D

E
F
G
H

I
J
K
L
Run Code Online (Sandbox Code Playgroud)

我希望它能像它一样出现

A,B,C,D
E,F,G,H
Run Code Online (Sandbox Code Playgroud)

我假设我会使用sed,但实际上我甚至不确定这是否是最好的工具.我愿意使用Linux系统上常用的任何东西.

perl,我这样做了......它有效,但它很脏,有一个尾随的逗号.希望更简单的事情:

$ perl -ne 'if (/^(\w)\R/) {print "$1,";} else {print "\n";}' test
A,B,C,D,
E,F,G,H,
I,J,K,L,    
Run Code Online (Sandbox Code Playgroud)

Mat*_*cob 8

输入记录分隔符设置为段落模式(-00),然后在任何剩余的空格上拆分每条记录:

$ perl -00 -ne 'print join("," => split), "\n"' test
Run Code Online (Sandbox Code Playgroud)

添加-l以启用自动换行(但请确保它在之前-00,因为我们希望$\将其设置为修改$/ 的值):

$ perl -l -00 -ne 'print join("," => split)' test
Run Code Online (Sandbox Code Playgroud)

添加-a以启用autosplit模式并隐式拆分为@F:

$ perl -l -00 -ane 'print join("," => @F)' test
Run Code Online (Sandbox Code Playgroud)

换出-n-p自动打印:

$ perl -l -00 -ape '$_ = join("," => @F)' test
Run Code Online (Sandbox Code Playgroud)

  • 我想出了'perl -00nE'chomp; S /\S + /,/克; 说'file`以防止输出的双倍间距. (2认同)