2017-06-19 56 views
0

一個循環我有閱讀一些CSV文件一個接一個,CSV文件將被命名爲Test1.csv,要求Test2.csv等。代碼:閱讀從多個CSV文件在外殼

 #!/bin/bash 
    IFS="," 
    FILES=/CSVFiles/* 
    CSVNAME=Test 
    n=1 
    for f in $FILES 
    while read Column1 Column2 
    do 
      echo $Column1 
      echo $Column2 
    done < "$CSVNAME"$n.csv 
    n=$((n+1)) 

返回這些錯誤:

./ReadCSV.sh:第23行:語法錯誤附近意外的標記',而」

./ReadCSV.sh:第23行:`同時讀取列1列2

+1

請註明有多少_Test ** N ** csv_文件存在,是否與文件。需要以任何特定順序顯示。 – agc

+0

這是一個很好的問題,因爲它會發生globbing不考慮文件順序 – sjsam

+0

根目錄中'/ CSVFiles /'*真* *似乎不太可能。請'cd'到該目錄並顯示'readlink -e Test1.csv'的輸出。 – agc

回答

0

你錯過了後

for f in $FILES 

但如果

do 

我明白你的意圖正確地說,您可以使用以下代碼改進示例:

#!/bin/bash 
for file in /CSVFiles/Test*.csv # Use file globbing to get the files 
do 
/*Use a stream editor like awk to print the lines*/ 
    awk -v FS="," '{ 
    /* if you want the columns in separate lines */ 
    print $1; 
    print $2; 
    }' "$file" 
done 

編輯2:如果你需要採取的文件順序考慮,下面的代碼可以幫助

#!/bin/bash 
#Count the total number of files using stat and grep 
total=$(stat -f /CSVFiles/Test*.csv | grep -c '^[[:blank:]]*File:') 
#User c-style for-loops in bash 
for((i=0;i<="$total";i++)) 
do 
awk -v FS="," '{ 
     /* if you want the columns in separate lines */ 
     print $1; 
     print $2; 
     }' "Test${i}.csv" # Feeding the file names in order 
done 
+0

Test1.csv:for循環中沒有此文件或目錄錯誤 – nkm

+0

@nkm:包含這些csv文件的文件夾的確切路徑是什麼?你是否像我一樣使用我的代碼? – sjsam

+0

修正後的路徑,能夠讀取第一個csv,但能夠讀取第一個csv本身的第二個csv打印值。 – nkm

0

這個怎麼樣。

IFS="," 
FILES=/CSVFiles/* 
cat $FILES|while read Column1 Column2 
do 
echo $Column1 
echo $Column2 
done 
+0

'cat $ FILES'可能不是一個好主意 – sjsam

0

的OP腳本的輸出似乎是等同於這一個班輪:

cut -d, -f1,2 /CSVFiles/Test*.csv | tr , '\n'