使用 wget 和 Awk 统计相似表达式

使用 wget 和 Awk 统计相似表达式

我正在尝试创建一个脚本,用于wget下载数据集,然后awk对文件进行排序,并告诉您最常用的过滤器是$14列。到目前为止,我的wget函数运行如下,

wget -O- http://energy.gov/sites/prod/files/FieldSampleAirResults_0.csv 

但是,我应该将其通过管道传输到awk脚本中,还是应该尝试在一个脚本中完成所有操作?另外,我知道你会如何检查常用词,它会是这样的

$14=="charcoal" {++charcoal} 

但我不确定如何在awk脚本中实现这一点。任何建议或帮助都将不胜感激。

谢谢,凯文

答案1

这将打印最常出现的过滤器类型。

wget -O- http://energy.gov/sites/prod/files/FieldSampleAirResults_0.csv | awk -F, '
    {
        filters[$14]++
    }
    END {
        for (filter in filters) {
            if (filters[filter] > max) {
                max = filters[filter]
                type = filter
            }
        }
        print type
    }'

如果您愿意,您可以轻松打印每种类型及其计数。如果需要,AWK 可以进行排序,或者您可以使用外部sort实用程序。

答案2

我将用它uniq来处理计数:

wget -O- http://energy.gov/sites/prod/files/FieldSampleAirResults_0.csv | cut -d, -f14 | sort | uniq -c

请注意,这无法正确处理包含逗号的引号字段。如果您需要处理这个问题,您需要一些真正理解 CSV 格式的东西,比如 Python 的源文件模块:

python -c 'import csv; import sys; [sys.stdout.write(row[14]+"\n") for row in csv.reader(sys.stdin)]'

相关内容