首页 > 解决方案 > 填充csv的列

问题描述

我有一个 csv 文件,其中包含大量 csv 分隔的数据行。我想找到该行的最大长度,然后需要在新列中打印 NO

文件.csv

1,2,3,4,
1,4,7,8,9,10,11,13
1,2,
1,1,2,4,5,6,7,8,9,10,11
abc,def,ghi,jkl

预期结果

1,2,3,4,,,,,,,,,,,,,,,,N0
1,4,7,8,9,10,11,13,,,,,NO
1,2,,,,,,,,,,,,,,,,,,,,NO
1,1,2,4,5,6,7,8,9,10,1,NO
abc,def,ghi,jkl,,,,,,,,NO
cat file | cat > file.csv
echo "N0" >> file.csv

获得的输出

1,2,3,4,NO
1,4,7,8,9,10,11,13,NO
1,2,NO
1,1,2,4,5,6,7,8,9,10,11,NO
abc,def,ghi,jkl,NO

标签: bashawkcommand-line

解决方案


很难想象你为什么要用逗号填充行所以这就是我认为你真正想要的就是让每一行都有相同数量的字段:

$ awk 'BEGIN{FS=OFS=","} NR==FNR{m=(m>NF?m:NF);next} {$(m+1)="NO"} 1' file file
1,2,3,4,,,,,,,,NO
1,4,7,8,9,10,11,13,,,,NO
1,2,,,,,,,,,,NO
1,1,2,4,5,6,7,8,9,10,11,NO
abc,def,ghi,jkl,,,,,,,,NO

这就是你所说的你想要的:

$ awk '{n=length()} NR==FNR{m=(m>n?m:n);next} {p=sprintf("%*s",m-n+1,""); gsub(/ /,",",p); $0=$0 p "NO"} 1' file file
1,2,3,4,,,,,,,,,,,,,,,,,NO
1,4,7,8,9,10,11,13,,,,,,NO
1,2,,,,,,,,,,,,,,,,,,,,,NO
1,1,2,4,5,6,7,8,9,10,11,NO
abc,def,ghi,jkl,,,,,,,,,NO

推荐阅读