我使用awk对csv文件中一列的总和进行计数。数据格式类似于:
id, name, value
1, foo, 17
2, bar, 76
3, "I am the, question", 99
我使用这个awk脚本来计算总和:
awk -F, '{sum+=$3} END {print sum}'
name字段中的一些值包含逗号,这会中断我的awk脚本。我的问题是: awk能解决这个问题吗?如果是,我该怎么做呢?
谢谢。
发布于 2010-07-01 01:14:22
在awk中编写如下所示的函数:
$ awk 'func isnum(x){return(x==x+0)}BEGIN{print isnum("hello"),isnum("-42")}'
0 1
你可以在你的脚本中加入这个函数,检查第三个字段是数字还是数字不是数字,然后去第四个字段,如果第四个字段不是数字,去第五个...till你会得到一个数字value.probably,在这里循环会有帮助,并把它加到和中。
发布于 2012-10-18 22:26:19
使用GNU awk
和FPAT的单向方法
awk 'BEGIN { FPAT = "([^, ]+)|(\"[^\"]+\")" } { sum+=$3 } END { print sum }' file.txt
结果:
192
发布于 2015-08-08 12:19:43
我正在使用
`FPAT="([^,]+)|(\"[^\"]+\")" `
使用gawk定义字段。我发现当字段为空时,它无法识别正确的字段数量。因为"+“在字段中至少需要一个字符。我将其更改为:
`FPAT="([^,]*)|(\"[^\"]*\")"`
并用"*"
替换"+"
。它工作正常。
我也发现GNU Awk用户指南也有这个问题。https://www.gnu.org/software/gawk/manual/html_node/Splitting-By-Content.html
https://stackoverflow.com/questions/3138363
复制相似问题