所以我在我的代码中尝试做的基本上是在具有这种格式的电子表格中读取
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 替换所有空空格。这是到目前为止的代码...
#!/bin/bash
while IFS=$'\t' read -r -a myarray
do
echo $myarray
done < something.csv
for e in ${myarray[@]
do
echo 'Can you see me #1?'
if [[-z $e]]
echo 'Can you see me #2?'
sed 's//0'
fi
done
代码并没有真正改变我的 csv 文件。编辑说明:数据全部以逗号分隔。
到目前为止我已经弄明白了:
好的,'Can you see me' 和 echo myarray 是测试代码。我想看看整个 csv 文件是否正在从 echo myarray 中读取(根据代码的输出似乎是这样)。然而,代码似乎根本没有通过 for 循环运行……我似乎无法理解。
非常感谢您的帮助! :)
最佳答案
您的 .csv
文件的格式不是逗号分隔的,而是左对齐的,用非常数的空白字符分隔每个字段。这使得在尝试查找和替换后跟非空列的空列时很难准确。
这是一个仅限 Bash 的解决方案,如果字段以逗号分隔,则该解决方案将完全准确。
#!/bin/bash
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
输出:
username,lastname,firstname,x1,x2,x3,x4
user1,dudette,mary,7,2,5,4
user2,dude,john,6,2,4,5
user3,dudest,rad,5,5,5,5
user4,dudaa,pad,3,3,5,9
关于arrays - 在 bash 脚本中遍历 csv 文件中的数组的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22288948/