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

But*_*kus 2 csv bash text pattern-matching

我有

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

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

我需要得到第3列和第4列,从第2列剥离填充,我不需要引号.

带编号的Csv格式:12 24(")25(,)26(")/ 27(Field2values)42(")/ 43(,)/ 44(Field3十进制值)"Field1_constant_value","Field2values",Field3,字段4

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

Rub*_*ens 6

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

考虑输入文件"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
Run Code Online (Sandbox Code Playgroud)

输出是:

田地[1 2 3 4]

田地[2 3 4 5]

领域[6 3 2 1]

  • `IFS =,读f1 f2 f3 f4; do ...`将避免为整个脚本设置`IFS`. (4认同)