我必须使用awk在csv文件中打印出4个不同的列.问题是字符串是$ x,xxx.xx格式.当我运行常规awk命令时.
awk -F, {print $1} testfile.csv
Run Code Online (Sandbox Code Playgroud)
我的输出结果看起来像
307.00
$132.34
30.23
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么.
"$141,818.88","$52,831,578.53","$52,788,069.53"
这大致是输入.我必须解析的文件是90,000行和大约40列这是输入的布局方式,或者至少是我必须处理的部分.对不起,如果我让你认为这不是我所说的.
如果输入为"$ 307.00","$ 132.34","$ 30.23",我希望输出为
$307.00
$132.34
$30.23
Run Code Online (Sandbox Code Playgroud)
Sie*_*geX 16
奇怪的是,我不得不在不久前解决这个问题,并且我保留了代码来完成它.你几乎拥有它,但你需要对你的字段分隔符有点棘手.
awk -F'","|^"|"$' '{print $2}' testfile.csv
Run Code Online (Sandbox Code Playgroud)
# cat testfile.csv
"$141,818.88","$52,831,578.53","$52,788,069.53"
"$2,558.20","$482,619.11","$9,687,142.69"
"$786.48","$8,568,159.41","$159,180,818.00"
Run Code Online (Sandbox Code Playgroud)
# awk -F'","|^"|"$' '{print $2}' testfile.csv
$141,818.88
$2,558.20
$786.48
Run Code Online (Sandbox Code Playgroud)
您会注意到"第一个"字段实际上是$2因为字段分隔符^".如果你问我,可以支付一小笔短线的价格.
我想你所说的是你想要将输入分成CSV字段,而不是被双引号内的逗号绊倒.如果是这样...
首先,","用作字段分隔符,如下所示:
awk -F'","' '{print $1}'
Run Code Online (Sandbox Code Playgroud)
但是,你仍然会在1美元的开头(以及最后一个字段的末尾)结束一个迷路双引号.通过使用gsub删除引号来处理,如下所示:
awk -F'","' '{x=$1; gsub("\"","",x); print x}'
Run Code Online (Sandbox Code Playgroud)
结果:
echo '"abc,def","ghi,xyz"' | awk -F'","' '{x=$1; gsub("\"","",x); print x}'
abc,def
Run Code Online (Sandbox Code Playgroud)