我想比较两个csv文件的第一列。我找到了这个答案,并尝试对其进行最小化调整(我想要第一列,而不是第二列,并且我希望打印出任何不匹配的内容,而不管控制列中是否存在该值)。
我以为这是要走的路:
BEGIN { FS = "," }
{
if(FNR==NR) {a[$1]=$1}
else {if (a[$1] != $1) {print}}
}
[在此,由于RavinderSingh13的评论,我已经删除了一个语法错误]
第一行应该将分隔符设置为逗号。只要我仍在读取第一个文件,第二行就应该完全填充数组。第三行是将第二个文件的第一列的元素逐元素地与所述数组进行比较。然后打印不匹配的整行。
但是,如果我将其应用于以下微小文件,这些微小文件在第一个非标题条目中有所不同:output2.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 $
对于逐行比较,更容易先匹配记录
$ paste -d, file1 file2 | awk -F, '$1!=(f=$(NF/2+1)){print NR":",$1, f}'
将打印前几个字段不一致的值。
使用您的输入文件,这将使
2: 4238 4237
3: 4239 4238
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句