我正在尝试阅读具有这种格式的电子表格
username, lastname, firstname, x1, x2, x3, x4
user1, dudette, mary, 7, 2, 4
user2, dude, john, 6, 2, 4,
user3, dudest, rad,
user4, dudaa, pad, 3, 3, 5, 9
基本上,它包含用户名、这些用户名对应的名称以及每个 x 的值。我想要做的是从一个 csv 文件中读取它,然后找到所有的空格并用 5s 填充它们。我这样做的方法是读入整个数组,然后用 0 替换所有空空格。这是到目前为止的代码...
感谢 stackoverflow 上的另一位受访者,我得到的解决方案是
n=5
while IFS=, read username lastname firstname x1 x2 x3 x4; do
! [[ $x1 ]] && x1=$n
! [[ $x2 ]] && x2=$n
! [[ $x3 ]] && x3=$n
! [[ $x4 ]] && x4=$n
echo $username,$lastname,$firstname,$x1,$x2,$x3,$x4
done < something.csv > newfile.csv && mv newfile.csv something.csv
在过去的几个小时里,我一直在想办法将其扩展到 n 列的情况。所以在上面的例子中,我知道我有 7 列,所以我读入了七个变量。我现在要做的是弄清楚如何将它扩展到 n 列的情况。即使添加了另一列,我仍然需要代码才能工作。
最佳答案
awk 更适合这种类型的 csv 解析和格式化。
awk -F '[, ]+' -v n=7 '{for (i=1; i<=n; i++) printf "%10s%s", $i, (i<n)?OFS:RS}' OFS=, x
username, lastname, firstname, x1, x2, x3, x4
user1, dudette, mary, 7, 2, 4,
user2, dude, john, 6, 2, 4,
user3, dudest, rad, , , ,
user4, dudaa, pad, 3, 3, 5, 9
关于arrays - 如何读取 CSV 文件的 n 列以检查它们是否为空?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22316019/