我在 Linux 服务器中有一个 csv 文件,该文件包含多个字段不同的行。我想确保所有记录都具有最大列数(空值)作为具有最大列数的行。我需要在 bash 脚本中实现这一点。如果可能的话,我想尝试使用 awk 我是 bash 的新手。
最佳答案
awk
来拯救。
您可以使用 T.J. 的示例输入文件在一个脚本中完成所有操作
$ awk -F, -v OFS=, 'NR==FNR{if(max<NF)max=NF;next};
{NF=max}1' file{,}
1,2,3,4,5,
1,2,3,4,,
1,2,3,,,
1,2,3,4,5,6
说明:这是一个双遍算法,在第一轮计算最大值并在第二轮使用。
NR==FNR
仅对第一个文件为真,计算最大值,注意不需要初始化最大值,因为默认值为零,长度将为非负数。 next
跳过脚本的其余部分。在第二轮设置中,NF=max
用更少的字段填充记录。 1
用作基于 awk
默认值的 print(或任何 true 语句)的简写。此外,file{,}
解析为 file file
,用于两次使用相同的文件以用于双 channel 算法。
同样可以使用数组和 END block 通过单遍编写。
关于linux - 确保 .csv 文件在 bash 中每一行的列数相同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37888912/