arrays - 具有两个可能的字段位置的 awk 数组解析
问题描述
我想使用 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 [$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 字段中的州名以外的结果,以及如何打印出现次数最多的州和多次出现的姓氏?
我想要得到的示例输出是这样的:
“出现频率最高的州是 VA。它出现了 8 次。
姓氏“Brown”出现了不止一次。它出现了 3 次。”
预先感谢您的帮助。
解决方案
您还没有向我们展示您的预期输出,所以不知道会是什么样子,但这足以让您继续前进:鉴于您在问题下的评论中分享的内容,创建状态数组和关联的姓氏以及有多少使用 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
所以我不关心前面字段中的任何逗号,状态在倒数第二个字段中,仅此而已。
推荐阅读
- javascript - 如何使用 JavaScript 捕获浏览器的屏幕截图?
- django - 如何查询人的内容(帖子/视频),当用户的详细信息和关注列表在单独的数据库中时,用户使用 Django ORM 关注
- python - 连接绘图中 zip 列表中的点。Python
- dremio - 可以通过分区重新加载dremio反射吗?
- unity3d - 动画正在移动盒子对撞机而不是统一的对象
- solana - 如何在资源管理器中隐藏帐户?
- asp.net-core - 如何在没有 assemblyinfo.cs 的情况下将 RootNamespace 属性添加到项目以修复本地化?
- python - 为什么导入一个文件的函数时需要引入参数
- mysql - 如何在 SQL 中使用 UNION 时将行源添加为另一列
- python - MatplotlibDeprecationWarning: '.predictImage()' 已被弃用!请改用'classifyImage()'