awk:使用将一列文件转换为多列csv文件

awk: convert one column file in a multiple columns csv file using

我有一个看起来像这样的文件

a
b
c
g
v
b
g
h
t
y

我正在寻找一个 awk 解决方案来将上述文件转换成这样

a,b,c,g
v,b,g,h
t,y

如果我咨询 here 我想我可以先使用 awk 进行转置,然后将我的唯一行分成多行。但是,我想我无法真正理解如何。 有什么好的 tutorials/link/cookbook/suggestion 可以咨询一下吗?

你可以使用这个awk:

awk 'NR%4 {printf [=10=]",";next} 1; END {print ""}' file

当行号不能被四整除时,只打印没有换行符的行并添加一个逗号。否则,打印带有换行符的行。

您可以使用 END 块在末尾打印换行符。

这是一个可能的解决方案

% cat p
echo 'a
b
c
g
v
b
g
h
t
y' | awk '{x=x==""?[=10=]:x "," [=10=]} NR%4==0{print x;x=""} END {if(x!="") print x}'
% sh p
a,b,c,g
v,b,g,h
t,y
% 

构建一行输出,用逗号连接多个输入行,当元素数等于 4 时,我们打印并重置输出行。

END 我们必须打印最后一行,如果它之前没有打印的话。

使用 sed:

sed '$!N;$!N;$!N;s/\n/,/g' file

其工作方式是 $! N 如果尚未到达文件末尾则执行 NN 获取下一行并将其附加到模式 space。重复三次,使模式 space 中有四行(或更少,在文件末尾),然后 s/\n/,/g 用逗号替换它们之间的换行符。

简短而甜美:

paste -d, - - - - | sed 's/,*$//'

将您的文件输入其中。