比较两个不同文件的内容

时间:2016-11-01 11:24:21

标签: linux bash shell

例如,`file1.txt,只包含变量:

SphericalUtil.computeArea

a b d c 包含file2.txt,变量和路径:

<

< a /x/y/1.c < c /x/d/7.h < f /x/c/6.s < b /x/v/8.mk < t /x/1.h < d /x/5.so 变量应与file1.txt进行比较。如果找到匹配项,则应从file2.txt打印完整的变量和路径。

预期产出:

file2.txt

我尝试使用< a /x/y/1.c < b /x/v/8.mk < d /x/5.so < c /x/d/7.h ,但效果不佳。

comm -3 file1.txt file2.txt无法在我的案例中使用。

4 个答案:

答案 0 :(得分:0)

如果file2.txt中的行不以&lt;开头,则可以使用此;

join <(sort file1.txt) <(sort file2.txt)

如果以&lt;开头char,你可以用它;

join -11 -22 <(sort file1.txt) <(sort file2.txt)

例如

user@host:/tmp$ join -11 -22 <(sort file1.txt) <(sort file2.txt)
a < /x/y/1.c
b < /x/v/8.mk
c < /x/d/7.h
d < /x/5.so

-11表示file1.txt和第一列,  -22表示file2.txt和第二列(在&#34;&lt;&#34; char之后)

答案 1 :(得分:0)

当键不在路径中的任何位置时的解决方案: 试试这个

cat file2.txt | grep -f file1.txt

根据需要切换文件名。

答案 2 :(得分:0)

你问过shell但我会通过python回答

import sys

with open(sys.argv[1], "r") as f:
    d = dict((e.rstrip().split()[1], e) for e in f)

with open(sys.argv[2], "r") as f:
    for e in f:
        e = e.rstrip()
        if e in d:
            print(d[e], end="")

如果您将其保存到run.py,则可以将其命名为

python3 run.py file2.txt file1.txt > output.txt

与排序解决方案相比,它还保留了file1.txt的顺序,但将第二个文件加载到内存中。

答案 3 :(得分:0)

AWK对这些事情有好处:

$ awk 'NR == FNR {keys[$0] = 1; next}keys[$2]' file1.txt file2.txt
< a /x/y/1.c
< c /x/d/7.h
< b /x/v/8.mk
< d /x/5.so

基本上,file1.txt在keys数组中缓冲。然后,如果第2列位于所述数组中,则打印file2中的每一行: