例如,`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
无法在我的案例中使用。
答案 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中的每一行: