我有两个文件,我想检查该文件中的每一行是否都存在。但是,有时每行中第二个单词之后的单词顺序不同。没关系,因为我只对前两个词/列之后的缺失/附加词感兴趣。
文件_A:
foobar A a ab c bd hd
bar B a c jd sm sldkjn
baz C boo abd
文件_B:
foobar A a c bd hd ab
baz C abd boo
bar B c a jd sm sldkjn
在上面的示例中,根据我的标准,这两个文件是好的。
一开始我试过
$ sort -u file_A > outA
$ sort -u file_B > outB
$ diff outA outB
这种方式不考虑行顺序。 但是,它会考虑每一行的词序。
如何忽略第二列之后每一行的单词顺序?
最佳答案
对于“sorted_in”使用 GNU awk:
$ cat tst.awk
BEGIN { PROCINFO["sorted_in"] = "@val_str_asc" }
{
key = $1 FS $2
$1 = $2 = ""
split($0,f)
for (i in f) {
key = key FS f[i]
}
keys[key]
}
NR==FNR { a[key]++; next }
{ b[key]++ }
END {
diff = 0
for (key in keys) {
if (a[key] > b[key]) {
print "<", key
diff = 1
}
else if (b[key] > a[key]) {
print ">", key
diff = 1
}
}
exit diff
}
每个键的计数和后来的数字比较对于识别情况是必要的,例如,file_A 的给定键列出了 2 次,而 file_B 只列出了一次,因此文件应该被报告为不同的。例如:
$ cat file_A
foobar A a ab c bd hd
bar B a c jd sm sldkjn
baz C boo abd
baz C boo abd
$ cat file_B
foobar A a c bd hd ab
baz C abd boo
bar B c a jd sm sldkjn
$ awk -f tst.awk file_A file_B
< baz C abd boo
关于python - 如何不考虑顺序逐行比较两个文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56139107/