arrays - 在 bash 脚本中遍历 csv 文件中的数组的问题

标签 arrays linux bash shell 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 替换所有空空格。这是到目前为止的代码...

#!/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/

相关文章:

javascript - 如何使数组值和对象键值匹配(无论顺序如何)

arrays - Swift:扩展 [<SomeType<T>?] 来生成 [<T>?] 可能吗?

linux - Eclipse 中的字体

linux - 如果 BASH 则不止一个

Linux Shell 脚本 : How to compare a specific field in a text document with specific text in an if statement

javascript - 基于每个关键属性的连接合并/扩展javascript对象数组

java - 检查数组元素是否包含特定值的最佳方法

java - 如何使用 Java 获取正在运行的进程列表

linux - Bash Script如何为用户名由两个单词组成的用户创建目录

bash 在 case 语句中传递参数对