gpt4 book ai didi

python - 如何不考虑顺序逐行比较两个文件?

转载 作者:太空宇宙 更新时间:2023-11-03 15:33:53 24 4
gpt4 key购买 nike

我有两个文件,我想检查该文件中的每一行是否都存在。但是,有时每行中第二个单词之后的单词顺序不同。没关系,因为我只对前两个词/列之后的缺失/附加词感兴趣。

文件_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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com