【发布时间】:2020-12-04 01:48:25
【问题描述】:
我想比较两个 csv 文件的第一列。我找到了this 答案并尝试对其进行最低限度的调整(我想要第一列,而不是第二列,并且我想要打印出任何不匹配的内容,无论该值是否存在于控制列中)。
我认为这是要走的路:
BEGIN { FS = "," }
{
if(FNR==NR) {a[$1]=$1}
else {if (a[$1] != $1) {print}}
}
[感谢 RavinderSingh13 的评论,这里我已经删除了一个语法错误]
第一行应该将分隔符设置为逗号。 只要我仍在阅读第一个文件,第二行就应该完全填充数组。 第三行是将第二个文件的第一列的元素按元素与所述数组进行比较。然后打印不匹配的整行。
但是,如果我将此应用于以下小文件,它们在第一个非标题条目中有所不同: 输出2.csv:
#ID,COU,YEA,VOT#
4238,"CHN",2000,1
4239,"CHN",2000,1
4239,"CHN",2000,1
4240,"CHN",2000,1
和 output.csv:
#ID,COU,YEA,VOT#
4237,"CHN",2000,1
4238,"CHN",2000,1
4239,"CHN",2000,1
4240,"CHN",2000,1
我没有打印出来。我这样称呼它:
ludi@ludi-M17xR4:~/Jason$ gawk -f compare_col_print_diff.awk output.csv output2.csv ludi@ludi-M17xR4:~/Jason$
【问题讨论】:
-
你需要把
{放在if之前,最后加上一个结尾}就可以了。我们只需要在{...}内调用 if 条件。 -
是的,这消除了语法错误,但它没有按预期工作!但是非常感谢你!
-
如果没有看到您的示例,就无法诚实地帮助逻辑部分,请添加示例并让我们知道,以便更好地理解您的问题。
-
@RavinderSingh13 当然!我将在一分钟内添加一个故障示例!非常感谢!
-
如果您更改输入文件的顺序 (
gawk -f compare_col_print_diff.awk output2.csv output.csv),您将在输出中看到4237。或者说,output2 中的所有数字都存在于 output2 中,但并非 output 中的所有数字都存在于 output2 中。
标签: awk