我有一个逗号分隔的文件,其中行的列数不均匀。
我想添加尾随逗号(具有空值),以便每列具有最大列数。
我目前有:
i1, 12, 15
i2, 00, 01
i3
i4, 18, 21, 36
这只是一个示例,实际文件的最大列数有所不同。
对于上述示例,我期望的输出是:
i1, 12, 15,
i2, 00, 01,
i3, , ,
i4, 18, 21, 36
提前谢谢!
答案 0 :(得分:2)
您可以使用awk来完成这项工作:
$ awk 'BEGIN{FS=OFS=", "}NF<=3{for(i=NF+1;i<=4;i++)$i=" "}7' file
i1, 12, 15,
i2, 00, 01,
i3, , ,
i4, 18, 21, 36
请注意,在第1行和第2行中,如果有关系,有两个尾随空格,您可以添加sub(/ *$/,"")
答案 1 :(得分:1)
一个用于GNU awk。它将文件处理两次。在第一次运行时,它确定最大字段数,在第二次运行中,它在末尾添加“空”(好,两个空格)字段:
$ awk '
BEGIN {
FS=OFS=", " # field separators
}
NR==FNR { # first run
if(maxnf<NF) # find the biggest NF
maxnf=NF
next
}
NF<maxnf {
nf=NF+1 # store NF+1 for for
NF=maxnf # reset the NF
for(nf;nf<=NF;nf++) # process the new fields
$nf=" "
}1' file file # output records
输出:
i1, 12, 15,
i2, 00, 01,
i3, , ,
i4, 18, 21, 36
答案 2 :(得分:1)
使用Miller(http://johnkerl.org/miller/doc)
mlr --nidx --fs ',' --repifs unsparsify --fill-with "" inputFile
你有
i1, 12, 15,
i2, 00, 01,
i3,,,
i4, 18, 21, 36
答案 3 :(得分:1)
如果输出行的顺序无关紧要,则与sort
一起另一个awk
$ awk -F"," ' {print NF "," $0 } ' tane.txt | sort -k1 -nr | awk -F, ' { if(NR==1) mx=NF;for(i=2;i<mx;i++) {$i=length($i)?$i:" "; printf "%s,", $i} print $i } '
i4, 18, 21, 36
i2, 00, 01,
i1, 12, 15,
i3, , ,
$
输入文件
$ cat tane.txt
i1, 12, 15
i2, 00, 01
i3
i4, 18, 21, 36
$