gpt4 book ai didi

ubuntu - 创建一个 awk 文件以过滤掉数据集中不重复的行

转载 作者:行者123 更新时间:2023-12-04 19:04:54 24 4
gpt4 key购买 nike

我有以下数据集,我想实现一个迭代,在 awk 文件中逐行检查(awk 或 for),然后按以下方式执行它:

gawk -f file.awk dataset.csv

请允许我获取一个包含没有重复记录的文件,并且最后一列中的浮点数四舍五入到小数点后两位。下面,我附上了我的数据集样本,如您所见,每个国家/地区应该只有一条记录。

40462186,US,177827,7671,4395,190
2872296,US,273870,3492,95349,1216
45236699,US,265691,6874,5873,152

由于我的水平不高,所以我不介意代码是否很长,因此我可以熟悉代码所经历的步骤。

awk '{a[$1]++}END{for (i in a)if (a[i]>1)print i;}' file

我发现这个命令可以帮助实现这样的功能,它是一个 shell 脚本而不是 awk 脚本。
预先感谢您的帮助

最佳答案

您的原始代码:

awk '{a[$1]++}END{for (i in a)if (a[i]>1)print i;}' file
测试倒置: a[i]>1应该是 a[i]==1只打印唯一的行。
实现 n截断的一些方法到小数点后 2 位是:
n = substr(n,1,match(n,/[.]/)+2)

n = sprintf("%0.2f",n)
所以你的脚本可能是:
BEGIN { FS=OFS="," } # delimit columns by comma
# csv must not have embedded commas

NR==1 {print; next} # print header

{ $10 = sprintf("%0.2f", $10) } # truncate column 10
# rewrites $0 so uses OFS

{ a[$0]++ } # using $0 means entire line must be unique

END { for (i in a) if (a[i]==1) print i } # print unique lines

鉴于您对数据清理的评论,使用两遍方法可能会更好:使用您的原始代码提醒您输入错误,然后在单独的遍中截断。
请注意,如果单个列发生更改,您将获得看似有效的输入。这些行是不同的:
Afghanistan,Afghanistan,AFG,40462186,Asia,177827,7671,4395,190,4.313743132
Afghanistan,Afghanistan,AFG,40462106,Asia,177827,7671,4395,190,4.313743132
我想您想检测到这一点,因此您的健全性检查需要更加复杂。

关于ubuntu - 创建一个 awk 文件以过滤掉数据集中不重复的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72325150/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com