我有一个看起来像那样的文件
a
b
c
g
v
b
g
h
t
y
我正在寻找一个awk解决方案来转换上面这样的文件
a,b,c,g
v,b,g,h
t,y
如果我咨询here我想我可以先使用awk进行转置,然后将我的唯一一行划分为多行。但是,我想我真的不明白怎么做。 有什么好的教程/链接/食谱/建议可以参考吗?
答案 0 :(得分:3)
您可以使用此awk
:
awk 'NR%4 {printf $0",";next} 1; END {print ""}' file
当行号不能被四个分割时,只需打印不带换行符的行并添加逗号。否则,使用换行符打印该行。
您可以使用END
块在最后打印换行符。
答案 1 :(得分:1)
这是一个可能的解决方案
% cat p
echo 'a
b
c
g
v
b
g
h
t
y' | awk '{x=x==""?$0:x "," $0} 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
我们必须打印最后一行,如果它不是之前打印的那么。
答案 2 :(得分:0)
使用sed:
sed '$!N;$!N;$!N;s/\n/,/g' file
这种方法的工作方式是$! N
如果尚未到达文件末尾则执行N
,N
获取下一行并将其附加到模式空间。这样做了三次,以便四个(或更少,在文件的末尾)行在模式空间中,然后s/\n/,/g
用逗号替换它们之间的换行符。
答案 3 :(得分:0)
短而甜蜜:
paste -d, - - - - | sed 's/,*$//'
将文件传输到该文件中。