【发布时间】:2020-10-26 10:27:16
【问题描述】:
我对 unix 命令相当陌生,但我有两个 .csv 文件,我想将第一列与 diff 或 comm 进行比较。每一行都是不同的,如果我要比较整行,这就是为什么我想比较每个文件中的第一列,然后以数字形式打印出差异,其中土地代码不应被多次计算。第一个文件还有一个我想在比较时跳过的标题。
来自 file1 的样本:
iso_code,continent,location,date,total_cases
AND,Denver ,America,2020-07-26,897.0
ABW,Copenhagen Denmark,,2020-03-13,2.0
AFG,Oslo,Norway,2020-09-06,324.0
AZE,Hamburg,Germany,2020-03-30,29.0
来自 file2 的样本:
AND,Denver ,America,2020-07-26,897.0
ABW,Copenhagen Denmark,,2020-03-13,5.0
ABW,Chil Ukrain,Aruba,2020-10-06,4449.0
ALB,Upsala,Sweden,2020-08-275.0,
AFG,Afghanistan,,2020-09-06,324.0
预期的输出应该是“2”,因为在两个文件中出现了两次相同的土地代码。国家代码的重复只能计算一次。这就是为什么预期输出应该是 2 而不是 3
我尝试了多种解决方案:
awk 'NR==FNR{c[$1]++;next};c[$1] == 0' owid-covid-data-filtered.csv owid-covid-data.csv | wc -l
使用 awk 我得到输出:1
和
diff owid-covid-data.csv owid-covid-data-filtered.csv |cut -d' ' -f1 owid-covid-data-filtered.csv| wc -l
总的来说,我希望在 file1 和 file2 第 1 列中出现相似的情况
【问题讨论】:
-
这些解决方案提供了什么输出,为什么会出错?
-
@underscore_d 我的输出是 51798,这是文件中的所有行。结果应该接近 200 左右。
-
请在您的问题中澄清:预期输出 2 是否因为 file2 中有两个代码在 file1 中不存在?
-
您的
awk ... | wc -l如您所料返回 2.. 有什么问题?你问的是什么问题? -
@JamesBrown 抱歉忘了提,使用 awk 我得到“awk:无法打开文件”