1

假设我有两个文本文件

文件 1

    hello i am John
    and i live in Cairo

文件 2

    hello i am Jogn 
    and i love in Cairo

我只需要列出两个文本之间的不同单词(不是空格或其他任何东西),以获得作为文件 3 的结果,该文件将包含列表中的两个单词,如以下

    file1     file2
    John      Jogn
    live      love

我怎么能这样做?

我努力了

    diff file1 file2 

但这无助于获得所需的结果

谢谢

4

2 回答 2

2

使用wdiff命令。

如果你没有它,它在“wdiff”包中,它应该在你的系统存储库中可用。

$ wdiff file1 file2
hello i am [-John-] {+Jogn+} 
and i [-live-] {+love+} in Cairo

如果您想要图形显示,该meld程序做得很好(如果您还没有“meld”包,请安装它)。

如果您需要特定的输出格式,则需要编写一个脚本。一个好的开始可能是过滤每个输入文件以将每个单词放在一行上(fmt -w 1是第一个近似值),然后对结果进行比较。

于 2013-10-30T22:59:26.733 回答
0

使用

awk '
    # BEGIN: print 1th & 2th args
    BEGIN{print ARGV[1], ARGV[2]}
    # if the current line is from "file1",
    # put line in the array "a" with the line number for key
    FNR==NR{a[NR]=$0}
    if current line is from "file2"
    FNR!=NR{
        # iterate over words of the current line
        for (i=1; i<=NF; i++) {
            # split a[key current line] array in array "arr"
            split(a[FNR], arr)
            # test if both file1 and file2 Nth element match
            if (arr[i] != $i) {
                print arr[i], $i
             }
          }
     }
' file1 file2

输出 :

/tmp/l1 /tmp/l2
John Jogn
live love
于 2013-10-30T23:25:41.753 回答