而read循环总是假的 - bash

时间:2015-05-28 13:52:40

标签: bash csv while-loop

对你来说可能是一个非常简单的问题但是我已经有一段时间了解这个问题。 基本上我想在文件夹中的每个csv文件中执行一些操作,我把这个简单的脚本放在一起:

#!/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

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

2 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分: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