我有
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 列,从 col 2 中删除填充,并且我不需要引号。
带有列号的 csv 格式:12 24(")25(,)26(")/27(字段 2 值) 42(")/43(,)/44(字段 3 十进制值)"Field1_constant_value","字段 2 值 ",字段 3,字段 4
字段 1 是常量且无关紧要的。数据被引用,从报价内的 2-23 开始。Field2 固定在 cols 27-41 的引号内,数据在左侧,右侧用空格填充。Field3 是一个十进制数,小数点前有 1、2 或 3 位数字,小数点后有 2 位数字,没有填充。从 col 74 开始。Field4是一个日期,我现在不太关心它。
是的,您可以使用 read; 您所要做的就是重置环境变量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
输出为:
字段[1 2 3 4]
字段[2 3 4 5]
字段[6 3 2 1]
几个很好的起点: http://backreference.org/2010/04/17/csv-parsing-with-awk/