循环访问CSV文件并在读取时创建新的csv文件?

时间:2012-11-17 19:58:21

标签: bash text csv pattern-matching

我有

while read $field1 $field2 $field3 $field4
do
  $trimmed=$field2 | sed 's/ *$//g'
  echo "$trimmed","$field3" >> new.csv
done < "$FEEDS"/"$DLFILE"

现在问题出在read我不能让它分割字段csv样式,可以吗?请参阅下面的输入csv格式。

我需要将第3列和第4列删除,从第2列剥离填充,我不需要引号。

带编号的Csv格式: 12 24(“)25(,)26(”)/ 27(Field2values)42(“)/ 43(,)/ 44(Field3十进制值) “Field1_constant_value”,“Field2values”,Field3,Field4

Field1是不变的,无关紧要。引用数据,从引号内的2-23开始。 Field2用引号内的cols 27-41固定,数据在左边,用右边的空格填充。 Field3是十进制数,在小数点前有1,2或3位,后面有2位,没有填充。从col 74开始。 Field4是一个约会,我现在对此并不在意。

2 个答案:

答案 0 :(得分:6)

是的,你可以使用阅读;你所要做的就是重置环境变量IFS - 内部字段分隔符 - ,这样它就不会按照当前值(默认为空格)来划分行,而是通过自己的分隔符。 / p>

考虑输入文件“a.csv”,给定内容:

  

1,2,3,4

     

-2,3,4,5-

     

6,3,2,1

你可以这样做:

IFS=','
while read f1 f2 f3 f4; do
    echo "fields[$f1 $f2 $f3 $f4]"
done < a.csv

输出是:

  

字段[1 2 3 4]

     

字段[2 3 4 5]

     

字段[6 3 2 1]

答案 1 :(得分:1)