使用字段的两个可能位置解析 awk 数组

awk array parsing with two possible location of fields

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

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

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

BEGIN { FS=","
}

{states1 [] += 1}

{states2 [] += 1}

{names [] += 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 个字段中州名以外的结果,以及如何打印出现次数最多的州和出现不止一次的姓氏?

我想要得到的示例输出是这样的:

"出现次数最多的州是VA,出现了8次
姓氏 "Brown" 出现不止一次。它出现了 3 次。"

提前感谢您的帮助。

你还没有向我们展示你的预期输出,所以我知道那会是什么样子,但这足以让你继续:鉴于你在你的问题下的评论中分享的内容,创建状态数组和关联的最后一个使用 GNU awk:

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

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