Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 在shell中循环读取多个CSV文件_Bash_Shell_Csv - Fatal编程技术网

Bash 在shell中循环读取多个CSV文件

Bash 在shell中循环读取多个CSV文件,bash,shell,csv,Bash,Shell,Csv,我需要逐个读取一些CSV文件,CSV文件将命名为Test1.CSV、Test2.CSV等。代码: #!/bin/bash IFS="," FILES=/CSVFiles/* CSVNAME=Test n=1 for f in $FILES while read Column1 Column2 do echo $Column1 echo $Column

我需要逐个读取一些CSV文件,CSV文件将命名为Test1.CSV、Test2.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))
#/bin/bash
IFS=“,”
FILES=/CSVFiles/*
CSVNAME=测试
n=1
对于f,在$FILES中
阅读第1列第2列时
做
echo$Column1
echo$Column2
完成<“$CSVNAME”$n.csv
n=$((n+1))
返回以下错误:

./ReadCSV.sh:第23行:意外标记“while”附近的语法错误

./ReadCSV.sh:第23行:`whilereadcolumn1 Column2

你错过了一个机会

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
#/bin/bash
#使用stat和grep统计文件总数
总计=$(stat-f/CSVFiles/Test*.csv | grep-c'^[:blank:][]*文件:')
#bash中循环的用户c风格
对于((i=0;i

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

OP脚本的输出似乎相当于这一行:

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

Test1.csv:在中没有此类文件或目录错误loop@nkm:包含这些csv文件的文件夹的确切路径是什么。您是否完全按照原样使用我的代码?已更正的路径,并且能够读取第一个csv但第二个csv打印值的第一个csv本身。请指定有多少Testn.csv文件,以及是否需要显示这些文件这是一个很好的点子。这是一个很好的要求,因为GooLink不会考虑文件命令进入会计,似乎不太可能<代码> / CSVFiles / < /COD>确实在根目录中。请将代码> CD <代码>到那个目录,并显示“代码> > RealLink -e Test1.CSV < /C> >的输出。@ AGC可能有N个CSV文件。每个csv中有两列,需要逐行打印每列的值。@nkm,我不知道“逐行”是什么意思,请给出一个输出示例。
cut -d, -f1,2 /CSVFiles/Test*.csv | tr , '\n'