我对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
看起来你有两个问题:
- 您的行都以
r
结尾 - 最后一行末尾没有新行或
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