当分隔符进入数据本身时,从逗号分隔文件中提取值

时间:2013-07-26 10:31:05

标签: shell unix

您好,我有一个要求,我想从逗号分隔文件中提取值。当文件定界符作为数据值出现时,会出现问题。所有值都将出现在一对单引号中,如果某些值未出现,那么它将为空白。 例如:

cat file1.dat
'Data1','DataA',,',',,'2','0','0'
'Data2','DataB','X','D','3','1','2'

在脚本中,我正在执行以下操作

while read line
do
F1=`echo $line | cut -d"," -f1`
F2=`echo $line | cut -d"," -f2`
F3=`echo $line | cut -d"," -f3`
F4=`echo $line | cut -d"," -f4`
print $F1
print $F2
print $F3
print $F4
done < file1.dat

现在输出:

'Data1'
'DataA'

'
'Data2'
'DataB'
'X'
'D'

期望的输出:

'Data1'
'DataA'

','
'Data2'
'DataB'
'X'
'D'

1 个答案:

答案 0 :(得分:0)

以下解决方案假定您有一个未出现在输入中的字符。假设字符|没有出现在file1.dat中,那么以下内容会产生所需的结果:

$ sed "s/,',/,'|/" file1.dat | cut -d, -f1-4 --output-delimiter=$'\n' | tr '|' ','
'Data1'
'DataA'

','
'Data2'
'DataB'
'X'
'D'