bash - 填充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
解决方案
很难想象你为什么要用逗号填充行所以这就是我认为你真正想要的就是让每一行都有相同数量的字段:
$ 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
推荐阅读
- angular - 如何延迟加载Angular Material Stepper的表单内容
- tkinter - 如何在 tkinter 中更改图像的位置
- sql - 什么 SQL 查询可用于通过参数值限制连续周期,然后计算其中的 datediff?
- android - 如何使用 Actions Builder 或 Actions SDK 告诉 Google Assistant 自动打开 Android 应用程序?
- python - 使用python将多列标题转换为单列?
- ios - Swift JSONDecoder 在构建期间抛出错误
- r - R脚本排名
- html - 如何简单地对 HTML 中的代码块进行颜色编码?
- javascript - RuntimeError:'线程'Stream'中没有当前事件循环'
- c# - linux 上的 C# .NET 核心,DONTLINGER 的 GetSocketOption 失败