首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当字符串使用特殊字符时,使用awk在文件之间比较字符串

当字符串使用特殊字符时,使用awk在文件之间比较字符串
EN

Stack Overflow用户
提问于 2021-09-30 20:42:53
回答 1查看 44关注 0票数 0

我有两个文件,我正在尝试查找file2中是否包含来自file1的字符串。每个文件每行只有一个字符串。原则上,像grep -f这样简单的东西应该可以工作,但我认为字符串复杂的事实是造成问题的原因。这是一个字符串外观的示例:

file1:

代码语言:javascript
复制
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

File2:

代码语言:javascript
复制
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行。

到目前为止,我的尝试是这样的:

代码语言:javascript
复制
awk 'NR=FNR{a[$1];next}!($1 in a)' file1 file2 > file3.out

它适用于简单的测试文件,但不适用于实际文件。

EN

回答 1

Stack Overflow用户

发布于 2021-09-30 21:12:44

您缺少的是grep -F选项。如果没有它,-f filename中的行就是正则表达式。它们是模式,而不是字符串。

在您的示例中,4*序列表示“零次或多次出现4",这绝对不是您想要的意思!

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69398623

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档