使用字段的两个可能位置解析 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)
而不是
所以我不关心前面字段中的任何逗号,状态在倒数第二个字段中,仅此而已。
我想使用 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)
而不是 所以我不关心前面字段中的任何逗号,状态在倒数第二个字段中,仅此而已。