perl - 使用 sed 进行数据转换

标签 perl awk sed

我有一个这样的文件:

A
B
C
D

E
F
G
H

I
J
K
L

我希望它出来

A,B,C,D
E,F,G,H

我假设我会使用 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,    

最佳答案

设置input record separator到段落模式(-00),然后在任何剩余的空白处拆分每条记录:

$ perl -00 -ne 'print join("," => split), "\n"' test

添加-l启用自动换行(但要确保它出现在 -00 之前,因为我们希望将 $\ 设置为 $/ < em>修改前):

$ perl -l -00 -ne 'print join("," => split)' test

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

$ perl -l -00 -ane 'print join("," => @F)' test

-n 换成 -p用于自动打印:

$ perl -l -00 -ape '$_ = join("," => @F)' test

关于perl - 使用 sed 进行数据转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48938123/

相关文章:

regex - 如何在正则表达式匹配后打印下几行直到另一个正则表达式匹配?

linux - 如果行匹配,如何在目标文件中标记行

xml - 使用 perl 解析大型 (100 Mb) XML 文件时出现 "Out of memory"

linux - 在 Linux (UBUNTU) 上使用 AWK 将 csv 文件中的格式从 %d/%m/%y 更改为 %Y-%m-%d

linux - 尝试通过 GNU Awk 3.1.7 读取数据

awk - Unix 提取两行之间的行并将它们存储在各自的文件中

linux - 如何将数字连续的文件名更改为相同的前缀但不同的后缀名?

perl - 跳过文件的前 x 行和最后 y 行

regex - 用于在字符串的第一个位置匹配 char '*' 的 Perl RegEx

mysql - FreeBSD、MySQL、Perl、bash : intermittent blocking on named pipes?