2015-05-28 51 views
0

可能对你而言很容易问题,但一直以来我都被这个问题困住了。 基本上我想在一个文件夹中每个CSV文件执行某些操作和我放在一起这样简单的脚本:虽然读循环总是假 - bash

#!/bin/bash 
for file in *.csv ; 
    do 

     echo $file #check 
     OLDIFS=$IFS 
     IFS="," 

     while read var1 
     do 
       echo $var1   
     done < $file 
     IFS=$OLDIFS 
done 

的CSV文件遵循所有相同的格式,1号线和12个变量,如:

name,1,2,3,4,5,6,7,8,9,11 

在我看来,虽然条件永远是假的,永远不会运行。 你能告诉我我哪里错了吗? 谢谢

+0

看起来它应该工作。你在运行什么外壳?你如何运行它?你在哪里运行它,csvs在哪里,它们在同一个目录中吗?你会得到任何输出吗? – 123

+0

双引号您的变量:'done <“$ file”' – choroba

+0

运行此脚本的输出是什么?你看到它输出任何文件名? –

回答

3

要获得第一个字段,您需要提供两个参数到read;第一个为第一个字段,第二个为分割后的剩余值。

#!/bin/bash 
for file in *.csv; do 
    echo $file #check 
    while IFS=, read name rest; do 
     echo "$name"   
    done < "$file" 
done 
0

像这样的东西应该工作。它将文件读入一个数组,每,分割一次。它遍历数组并在新行上打印出每个元素。

#!/bin/bash 
for file in *.csv 
do 
    echo "$file" #check 

    IFS=',' read -a vars < "$file" 

    for var1 in ${vars[@]} 
    do 
     echo "$var1" 
    done 
done