我有两个文件,我正在尝试查找file2中是否包含来自file1的字符串。每个文件每行只有一个字符串。原则上,像grep -f这样简单的东西应该可以工作,但我认为字符串复杂的事实是造成问题的原因。这是一个字符串外观的示例:
file1:
InChI=1S/C33H29N3O12S.4K/c1-18-6-7-22(35(14-28(37)38)15-29(39)40)25(10-18)46-8-9-47-26-12-19-11-20(32-34-21-4-2-3-5-27(21)49-32)33(45)48-24(19)13-23(26)36(16-30(41)42)17-31(43)44;;;;/h2-7,10-13H,8-9,14-17H2,1H3,(H,37,38)(H,39,40)(H,41,42)(H,43,44);;;;/q;4*+1/p-4File2:
InChI=1S/C33H29N3O12S.4K/c1-18-6-7-22(35(14-28(37)38)15-29(39)40)25(10-18)46-8-9-47-26-12-19-11-20(32-34-21-4-2-3-5-27(21)49-32)33(45)48-24(19)13-23(26)36(16-30(41)42)17-31(43)44;;;;/h2-7,10-13H,8-9,14-17H2,1H3,(H,37,38)(H,39,40)(H,41,42)(H,43,44);;;;/q;4*+1/p-4
InChI=1S/C16H24O2/c1-2-3-4-5-6-7-8-9-10-11-12-13-14-15-16(17)18/h2-8,13-15H2,1H3,(H,17,18)
InChI=1S/C11H23O5P/c12-11(13)9-7-5-3-1-2-4-6-8-10-17(14,15)16/h1-10H2,(H,12,13)(H2,14,15,16)在本例中,前两行都匹配,其他行不匹配。在实际情况中,file1中有大约200行,file2中有大约10K行。
到目前为止,我的尝试是这样的:
awk 'NR=FNR{a[$1];next}!($1 in a)' file1 file2 > file3.out它适用于简单的测试文件,但不适用于实际文件。
发布于 2021-09-30 21:12:44
您缺少的是grep -F选项。如果没有它,-f filename中的行就是正则表达式。它们是模式,而不是字符串。
在您的示例中,4*序列表示“零次或多次出现4",这绝对不是您想要的意思!
https://stackoverflow.com/questions/69398623
复制相似问题