簡體   English   中英

如何在bash中讀取單列CSV文件?

[英]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個問題:

  1. 您的行都以\\r結尾
  2. 在最后一行的末尾沒有新行或\\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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM