[英]How to read a single column CSV file in bash?
一般來說,我對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字符。 一旦弄清楚如何做到這一點,我將在此處標記對我有用的答案。
如果要將行存儲在數組中,只需執行以下操作:
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
看來您有2個問題:
\\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]: %s\n" "$i" "${array[$i]}"
done
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.