arrays - 如何读取 CSV 文件的 n 列以检查它们是否为空?

标签 arrays linux bash variables csv

我正在尝试阅读具有这种格式的电子表格

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/

相关文章:

bash - 如何从 bash 中的特定点创建新行?

java - 对不同数据类型数组中一种数据类型的对象使用接口(interface)方法? java

c - C中结构数组的静态初始化

linux - 从 linux 以 Debug模式运行 Grails 2.3.1

linux - 为什么 %rbp 没有指向任何东西?

linux - linux下如何使用 `find`命令删除非空目录?

ruby - array[1..-2] 是什么意思?

java - 程序无法运行(maxMinArray)

c++ - 在所有操作系统中应用文件统计(统计的结构类型)

linux - 终端中的 Sips 命令不起作用 - "Error 4: no file was specified"