多文件中的Awk比较
我有两个文件:多文件中的Awk比较,awk,Awk,我有两个文件: file1: 1,apple 2,mango 3,banana 44,orange file2: 1,apple 22, 31,xyz 2,man 3,banana 44,oran 44,orange 我需要找到使用第1列和检查第2列的文件的差异。我不想使用$0来打印第一个文件中不在文件2中的行 结果输出应打印在文件3中,如下所示: 2,mango,man 44,orange,oran 芒果来自file1(第2列
file1
:
1,apple
2,mango
3,banana
44,orange
file2
:
1,apple
22,
31,xyz
2,man
3,banana
44,oran
44,orange
我需要找到使用第1列和检查第2列的文件的差异。我不想使用$0
来打印第一个文件中不在文件2中的行
结果输出应打印在文件3
中,如下所示:
2,mango,man
44,orange,oran
芒果来自file1
(第2列),男人来自file2
(第2列)下面的awk
可能对你有同样的帮助
awk -F, 'FNR==NR{a[$1]=$0;b[$2];next} ($1 in a) && !($2 in b){print a[$1],$2}' OFS=, Input_file1 Input_file2
如果要将输出放入名为file3的文件中,请在上述命令的最后添加>file3
。稍有不同的awk:
$ awk 'BEGIN{FS=OFS=","}($1 in a) && a[$1]!=$2{print $1,a[$1],$2}{a[$1]=$2}' file1 file2
2,mango,man
44,orange,oran
解释:
awk 'BEGIN {
FS=OFS="," # set separators
}
($1 in a) && a[$1]!=$2 { # if the id is in a and $2s differ (may occur only after file1
print $1,a[$1],$2 # output is already hashed into a)
}
{
a[$1]=$2 # hash to a
}' file1 file2
感谢它按预期工作,是否可以向我提供此脚本的详细信息,嗨,詹姆斯,我面临一个问题,如果文件2有两行,如44,oran 44,orange,那么我得到的结果如下:-44,oran 44,oran,orange。这不是我的预期结果。如果我们可以将这些结果导出并写入其他文件,可能吗?请将一个文件具有2个相同ID时的预期结果更新到原始示例。更新的文件2请运行ur cmd,您可以看到描述。当使用重复ID索引数据时,问题非常明显。问题是在这种情况下,您的预期输出是什么?如果文件1中存在重复项,预期的输出是什么?文件2怎么样?如果两个文件都有重复的呢?打印第一个条目?打印第二个条目?