Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
linux文件比较_Linux_Unix_Filesystems - Fatal编程技术网

linux文件比较

linux文件比较,linux,unix,filesystems,Linux,Unix,Filesystems,我想在Linux中比较两个文件,但比较不应该基于逐行比较,我想将结果转储到另一个文件。 例如: 文件1是: ABC B KLM JAH MONU PANDA 文件2是: HELLO PRETTI ABC B LKMO 现在,我想得到的是文件1和文件2内容之间的区别,而不是逐行计算。比如文件1-2,即文件1中的内容,而不是文件2中的内容 差异文件: KLM JAH MONU PANDA 我尝试在Linux中使用diff、comm,但它通过逐行比较显示结果我从您的示例输出推断,您希望计算两个文

我想在Linux中比较两个文件,但比较不应该基于逐行比较,我想将结果转储到另一个文件。 例如:

文件1是:

ABC
B
KLM
JAH
MONU
PANDA
文件2是:

HELLO
PRETTI
ABC
B
LKMO
现在,我想得到的是文件1和文件2内容之间的区别,而不是逐行计算。比如文件1-2,即文件1中的内容,而不是文件2中的内容

差异文件:

KLM
JAH
MONU
PANDA

我尝试在Linux中使用diff、comm,但它通过逐行比较显示结果

我从您的示例输出推断,您希望计算两个文件之间的编辑距离

引述:

Levenshtein距离也可以在两个更长的距离之间计算 字符串,但计算它的成本大致与 这两个字符串长度的乘积使得这不切实际


那么你的文件有多大?你是在追踪人物还是文字?对于少量字符或单词的小文件,您可以根据需要编写自己的命令行Levenshtein距离工具。

我从您的示例输出推断,您希望计算两个文件之间也称为编辑距离的值

sort file1.txt file2.txt file2.txt | uniq -u
引述:

Levenshtein距离也可以在两个更长的距离之间计算 字符串,但计算它的成本大致与 这两个字符串长度的乘积使得这不切实际

那么你的文件有多大?你是在追踪人物还是文字?对于少量字符或单词的小文件,您可以根据需要编写自己的命令行Levenshtein距离工具

sort file1.txt file2.txt file2.txt | uniq -u
这将对file1和file2进行排序。筛选唯一值时,仅报告仅在file1中出现的值

如果允许file1.txt重复相同的值,则可能需要进行预处理,使事情变得更复杂:

sort <(sort -u file1.txt) file2.txt file2.txt | uniq -u
这将对file1和file2进行排序。筛选唯一值时,仅报告仅在file1中出现的值

如果允许file1.txt重复相同的值,则可能需要进行预处理,使事情变得更复杂:

sort <(sort -u file1.txt) file2.txt file2.txt | uniq -u

行的显示顺序重要吗?如果顺序不重要,这在awk中有一个非常优雅的解决方案:

awk 'BEGIN { 
  while((getline<"file2.txt")>0) {
    eliminate[$0] = 1
  }
}
!($0 in eliminate) { print }' file1.txt

行的显示顺序重要吗?如果顺序不重要,这在awk中有一个非常优雅的解决方案:

awk 'BEGIN { 
  while((getline<"file2.txt")>0) {
    eliminate[$0] = 1
  }
}
!($0 in eliminate) { print }' file1.txt
我很困惑,为什么通讯不工作

这正是你想要的文件,模排序。现在,如果您希望按照文件1中显示的顺序对它们进行排序,那就另当别论了。我假设你的问题没有压制第二列,这就是你如何逐行比较的原因,也就是说:

$ comm -3 <(sort file1) <(sort file2)
    HELLO
JAH
KLM
    LKMO
MONU
PANDA
    PRETTI
关于与原始订单产生差异文件的事宜:

$ comm -23 <(sort file1) <(sort file2)|grep -f - file1
KLM
JAH
MONU
PANDA
我很困惑,为什么通讯不工作

这正是你想要的文件,模排序。现在,如果您希望按照文件1中显示的顺序对它们进行排序,那就另当别论了。我假设你的问题没有压制第二列,这就是你如何逐行比较的原因,也就是说:

$ comm -3 <(sort file1) <(sort file2)
    HELLO
JAH
KLM
    LKMO
MONU
PANDA
    PRETTI
关于与原始订单产生差异文件的事宜:

$ comm -23 <(sort file1) <(sort file2)|grep -f - file1
KLM
JAH
MONU
PANDA

needleman-wunch算法有用吗?为了得到有价值的回答,您需要描述您想要使用的确切算法。看看您的示例,您似乎正在对空格进行标记化,并忽略文件2中没有出现在文件1中的内容。但这只是猜测。实际上,文件的内容是用换行符分隔的,而不是用空格分隔的。needleman-wunch算法有用吗?为了得到有价值的回答,您需要描述您想要使用的确切算法。看看您的示例,您似乎正在对空格进行标记化,并忽略文件2中没有出现在文件1中的内容。但这只是猜测。实际上,文件的内容是用换行符分隔的,而不是空格。我在跟踪单词。单词是一个在另一个下面的,即排列在一列中。我在跟踪单词。单词是一个在另一列下面的,即排列在一列中。你能解释为什么文件2被排序两次吗内部发生的事情。@monucool:它不仅被排序两次,还被包含两次。这可以确保仅在文件2中的任何行都不会被报告,因为它“出现”了两次。请注意,如果file2.txt包含10行,则按定义对file2.txt file2.txt排序将返回20行,和sort file2.txt file2.txt | uniq-u按定义返回0行换句话说:因为uniq-u用于抑制输入中出现两次的任何行`包括file2两次'是告诉命令| u从不报告file2中的行的廉价方法。最终结果是报告文件1中唯一出现的行。这种方法不保留原始顺序。@IanTegebo哦,这不是必需的。但是你是对的,如果需要的话,我会使用一个简单的perl或python脚本
你能解释一下为什么文件2被排序两次吗?你能解释一下内部发生了什么吗?@monucool:它不仅被排序两次,还被包含两次。这可以确保仅在文件2中的任何行都不会被报告,因为它“出现”了两次。请注意,如果file2.txt包含10行,则按定义对file2.txt file2.txt排序将返回20行,和sort file2.txt file2.txt | uniq-u按定义返回0行换句话说:因为uniq-u用于抑制输入中出现两次的任何行`包括file2两次'是告诉命令| u从不报告file2中的行的廉价方法。最终结果是报告文件1中唯一出现的行。这种方法不保留原始顺序。@IanTegebo哦,这不是必需的。但是你是对的,如果标准UNIX工具需要+1,我会使用一个简单的perl或python脚本+1用于grep-f技巧,我以前从未使用过。非常有意义。+1适用于标准UNIX工具+1用于grep-f技巧,我以前从未使用过。这很有道理。