mag*_*hen 24 csv awk field quoting text-parsing
我使用awk来计算csv文件中一列的总和.数据格式如下:
id, name, value
1, foo, 17
2, bar, 76
3, "I am the, question", 99
Run Code Online (Sandbox Code Playgroud)
我使用这个awk脚本来计算总和:
awk -F, '{sum+=$3} END {print sum}'
Run Code Online (Sandbox Code Playgroud)
name字段中的某些值包含逗号,这会破坏我的awk脚本.我的问题是:能解决这个问题吗?如果是的话,我该怎么做?
谢谢.
Ste*_*eve 20
使用GNU awk
和FPAT的一种方式
awk 'BEGIN { FPAT = "([^, ]+)|(\"[^\"]+\")" } { sum+=$3 } END { print sum }' file.txt
Run Code Online (Sandbox Code Playgroud)
结果:
192
Run Code Online (Sandbox Code Playgroud)
我在用
`FPAT="([^,]+)|(\"[^\"]+\")" `
Run Code Online (Sandbox Code Playgroud)
用 gawk 定义字段。我发现当该字段为空时,它无法识别正确的字段数。因为“+”要求字段中至少有 1 个字符。我把它改成:
`FPAT="([^,]*)|(\"[^\"]*\")"`
Run Code Online (Sandbox Code Playgroud)
并替换"+"
为"*"
. 它工作正常。
我也发现GNU Awk User Guide也有这个问题。 https://www.gnu.org/software/gawk/manual/html_node/Splitting-By-Content.html
Vij*_*jay -6
你在 awk 中编写一个函数,如下所示:
$ awk 'func isnum(x){return(x==x+0)}BEGIN{print isnum("hello"),isnum("-42")}'
0 1
Run Code Online (Sandbox Code Playgroud)
您可以在脚本中合并此函数并检查第三个字段是否为数字。如果不是数字,则转到第四个字段,如果第四个字段不是数字,则转到第五个...直到达到数字值。也许一个循环在这里会有所帮助,并将其添加到总和中。
归档时间: |
|
查看次数: |
16002 次 |
最近记录: |