如何在bash中读取单列CSV文件



我对bash/编程还是比较陌生的。

我有一个单列CSV,看起来像这样:

domain1.com
domain2.com
domain3.com
domain4.com

我想遍历每个条目并对其进行处理。下面是我的代码:

foo(){
i=0
  while read -a line; 
    do
      echo ${line[i]}
      ((i++))
    done < myfile.csv 
}

什么也没发生。我已经弄清楚,如果我改变我所指向的文件:

done< <(grep '' myfile.csv)

也可以,但是只输出CSV文件的最后一行,如下所示:

domain4.com 
再一次,我是一个初学者,自学这些东西,所以你想给你的答案的任何解释将是非常感激的!

EDIT所以看来我的新问题是从我的CSV文件中删除^M字符。一旦我弄清楚如何做到这一点,我将在这里标记适合我的答案。

如果你想把你的行存储在一个数组中,你只需:

readarray -t lines < file

如果你想处理这些行你可以输入

for line in "${lines[@]}"; do
    echo "$line"
done

或按索引(注意!):

for i in "${!lines[@]}"; do
    echo "${lines[i]}"
done

索引从0开始

while read p; do
  echo $p
done < myfile.csv

看起来你有两个问题:

  1. 您的行都以r
  2. 结尾
  3. 最后一行末尾没有新行或r

要解决这个问题,使用以下脚本:

echo >> file.csv
while read -r line; do echo "$line"; done < <(tr 'r' 'n' < file.csv)

您也可以简单地使用:

将文件读入数组。
array=( `<file` )

如果您需要使用数字索引,那么您可以使用:

访问元素。
for ((i=0;i<${#array[@]};i++))
    printf " array [%2d]: %sn" "$i" "${array[$i]}"
done

最新更新