一般来说,我对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
同样,我是一名初学者并自学这些东西,所以你想要给出的任何解释都会非常感激!
编辑因此,我的新问题似乎是从我的CSV文件中删除^ M字符。一旦我弄清楚如何做到这一点,我会在这里标出适合我的答案。
答案 0 :(得分:3)
如果您想将线条存储在阵列上,您只需执行以下操作:
readarray -t lines < file
而且,如果您想尝试处理这些行,您可以使用
for line in "${lines[@]}"; do
echo "$line"
done
或通过索引(记住!
):
for i in "${!lines[@]}"; do
echo "${lines[i]}"
done
指数从0开始。
答案 1 :(得分:2)
while read p; do
echo $p
done < myfile.csv
答案 2 :(得分:1)
看起来你有2个问题:
\r
\r
要解决此问题,请使用以下脚本:
echo >> file.csv
while read -r line; do echo "$line"; done < <(tr '\r' '\n' < file.csv)
答案 3 :(得分:0)
您也可以使用以下命令将文件读入数组:
array=( `<file` )
如果您需要使用数字索引,则可以使用以下命令访问元素:
for ((i=0;i<${#array[@]};i++))
printf " array [%2d]: %s\n" "$i" "${array[$i]}"
done