繁体   English   中英

awk 数组解析,具有两个可能的字段位置

[英]awk array parsing with two possible location of fields

我想使用 awk 来解析一个文本文件,该文件具有用逗号分隔的字段。 我需要找出每个 state 在文件中出现的次数,并找到出现频率最高的 state。 我还需要查明姓氏是否不止一次出现。 文件中的第二个字段对应于姓氏,但字段 5 或 6 可以具有 state 名称。 此外,文本的第一行用于存储字段的名称,因此应该跳过。 这是数据文件的一部分:

First Name,Last Name,Address,City,State,Zip
Rose,Stark,9283 Vivamus Avenue,Toledo,OH,13856
Remedios,Barber,Ap #331-7101 Elit, St.,Rock Springs,WY,88149

在第二行中,state 出现在第 5 个字段中,而在第三行中,它出现在第 6 个字段中。 这是我的代码:...

BEGIN { FS=","
}

{states1 [$5] += 1}

{states2 [$6] += 1}

{names [$2] += 1}

END {

    for (state in states1)
        print state, states1 [state]
    print "-----"

    for (state in states2)
        print state, states2 [state]
    print "-----"

    for (name in names)
        print name, names [name]

}

...

如何在第 5 和第 6 字段中过滤除 state 名称以外的结果,如何打印出现次数最多且姓氏出现多次的 state?

我想得到的样本 output 是这样的:

“出现频率最高的状态是 VA。它出现了 8 次。
姓氏“布朗”不止一次出现。 它发生了3次。”

预先感谢您的帮助。

您还没有向我们展示您预期的 output ,所以我知道那会是什么样子,但这里足以让您继续前进:鉴于您在问题下的评论中分享的内容,创建 arrays 州和相关姓氏以及多少使用 GNU awk 会有这个:

awk -F, '
NR>1 { states_names[$(NF-1)][$2] }
END {
    for (state in states_names) {
        for (name in states_names[state]) {
            print state, length(states_names[state]), name
        }
    }
}' file

注意使用$(NF-1)而不是$5所以我不关心前面字段中的任何逗号,state 在倒数第二个字段中,仅此而已。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM