String AWK文本文件比较(包含';b';文件和';文件中的字符串的次数)
我有一个较小的txt文件,大约50000行(a.txt),还有一个较大的txt文件,大约1m行(b.txt) 我想知道b.txt包含a.txt中的字符串多少次String AWK文本文件比较(包含';b';文件和';文件中的字符串的次数),string,bash,awk,String,Bash,Awk,我有一个较小的txt文件,大约50000行(a.txt),还有一个较大的txt文件,大约1m行(b.txt) 我想知道b.txt包含a.txt中的字符串多少次 (if [[ $s1 == *"$s2"* ]]). 事实: 每行长度在5-65个字符之间 每行只包含一个字符串 仅限英文字母 字符串中没有空格 不会有精确的匹配 这是我的源代码。它正在工作,但速度相当慢。 你能帮我吗?我怎样才能做得更快 #!/bin/bash awk 'FNR==NR{a[$1]; next} {s=$1; for
(if [[ $s1 == *"$s2"* ]]).
事实:
每行长度在5-65个字符之间
每行只包含一个字符串
仅限英文字母
字符串中没有空格
不会有精确的匹配
这是我的源代码。它正在工作,但速度相当慢。
你能帮我吗?我怎样才能做得更快
#!/bin/bash
awk 'FNR==NR{a[$1]; next} {s=$1; for (i in a) if (index(i, $1)) s=s FS i; if (s!=$1) print s}' a.txt b.txt > result.txt
理想的输出是results.txt:
例如:
a1string是a.txt中的第一个字符串,如果b.txt包含多个a1string,则在i writea1string中,以及b.txt中包含a1string的字符串
grep -F -c -f a.txt b.txt
-F
表示执行精确匹配,而不是正则表达式-c
表示对匹配行进行计数,而不是打印它们-f a.txt
表示从文件a.txt
中获取要匹配的字符串,而不是从命令行参数中获取
要查看所有单个匹配项,请使用-o
选项。然后通过管道将其输送到sort
和uniq
以获取每一个的计数
grep -F -o -f a.txt b.txt | sort | uniq -c | sort -nr
您好,不会有任何精确匹配精确匹配可以在行中的任何位置,它不匹配整行(这是
-x
选项所做的)。好的,现在我可以看到有14000个匹配。如何在b.txt中找到a.txt中的哪些字符串(以及找到了多少次)?您好,我可以对输出进行排序吗?(描述)当然可以。这就是管道之美。看更新我不认为有一个简单的方法可以使这从根本上更快。有一件事可能会有帮助,那就是用搜索字符串和匹配行将每个匹配项打印为一行,然后进行排序和汇总,但这可能会更慢,只是比当前的输出格式更难处理。也许搜索字符串文件可以转换为flex
源文件并进行编译,但我怀疑这仍然不会使它更有效率。