Bash fgrep-f,它还从string_文件输出匹配的字符串

Bash fgrep-f,它还从string_文件输出匹配的字符串,bash,unix,grep,Bash,Unix,Grep,我正在使用命令: fgrep -wf string_file.txt searching_file.txt > myoutput.txt (在下面的例子中,为了简单起见,为了举例,我只提供了很少的值,但请假设可能还有更多) -f用于指定基于search_file.txt中的搜索的字符串_文件 -w用于执行基于单词的搜索,并消除两个文件之间的分数匹配 string_file.txt包含: DEFB106A ZXFGH456 ANKRD23 FNTDRE2433 1553970_s_at

我正在使用命令:

fgrep -wf string_file.txt searching_file.txt > myoutput.txt
(在下面的例子中,为了简单起见,为了举例,我只提供了很少的值,但请假设可能还有更多)

-f
用于指定基于search_file.txt中的搜索的字符串_文件

-w
用于执行基于单词的搜索,并消除两个文件之间的分数匹配

string_file.txt包含:

DEFB106A
ZXFGH456
ANKRD23
FNTDRE2433
1553970_s_at    carboxyl ester lipase (bile salt-stimulated lipase) /// bile salt-activated lipase
1552411_at  defensin, beta 106A /// defensin, beta 106B, DEFB106A /// DEFB106B
1555890_at  olfactory receptor, family 2, subfamily A, member 20 pseudogene /// OR2A20P /// OR2A9P
1553366_s_at    ankyrin repeat domain 23 /// ankyrin repeat domain 39, ANKRD23 /// ANKRD39  
1554894_a_at    pterin-4 alpha-carbinolamine dehydratase/dimerization cofactor of hepatocyte PCBD2
1555286_at  cyclin-dependent kinase-like 1 (CDC2-related kinase), CDKL1
搜索_file.txt包含:

DEFB106A
ZXFGH456
ANKRD23
FNTDRE2433
1553970_s_at    carboxyl ester lipase (bile salt-stimulated lipase) /// bile salt-activated lipase
1552411_at  defensin, beta 106A /// defensin, beta 106B, DEFB106A /// DEFB106B
1555890_at  olfactory receptor, family 2, subfamily A, member 20 pseudogene /// OR2A20P /// OR2A9P
1553366_s_at    ankyrin repeat domain 23 /// ankyrin repeat domain 39, ANKRD23 /// ANKRD39  
1554894_a_at    pterin-4 alpha-carbinolamine dehydratase/dimerization cofactor of hepatocyte PCBD2
1555286_at  cyclin-dependent kinase-like 1 (CDC2-related kinase), CDKL1
此运行的输出为:myoutput.txt

1552411_at  defensin, beta 106A /// defensin, beta 106B, DEFB106A /// DEFB106B
1553366_s_at    ankyrin repeat domain 23 /// ankyrin repeat domain 39, ANKRD23 /// ANKRD39

由于搜索字符串(用于执行搜索的String文件的字符串)通常被发现是“掩埋”在行的中间,例如:“DEFB106A”在行的中间:

1552411_at  defensin, beta 106A /// defensin, beta 106B, **DEFB106A** /// DEFB106B
  • 我主要感兴趣的是使用sting_文件中自己的原始字符串来分配每个输出行,这样我就能够轻松地确定在searching_file.txt文件中生成了匹配的搜索字符串
  • 或者,换句话说,这里的想法是从原始行中提取匹配字符串。同时,我还需要整个上下文(因此我也对输出整个匹配行感兴趣,因为它包含我需要的值,例如probeset ID,例如1552411_At)
  • 这里的想法也是为了让我们能够识别string_file.txt中的哪个字符串在搜索_file.txt中匹配
例如,作为输出,我希望得到如下结果:

1552411_at  defensin, beta 106A /// defensin, beta 106B, DEFB106A /// DEFB106B    DEFB106A 
1553366_s_at    ankyrin repeat domain 23 /// ankyrin repeat domain 39, ANKRD23 /// ANKRD39  ANKRD23 


请注意,许多情况下,如ZXFGH456和FNTDRE2433(来自字符串_文件)都不会产生任何匹配。

您可以使用
sed
grep的输出进行后处理,如下所示-假设您有Bash和:

\
是一些版本的
sed
支持标记单词开头和结尾的老式符号。实际上,除非您需要搜索列表中另一个单词的子字符串(因此,如果您需要搜索
ABCD
ABCDEF
,则必须使用结束标记),否则可能不需要这些标记

sed
脚本输出通过过程替换提供给外部
sed
,并对
grep
的输出进行后处理(
grep-F
相当于
fgrep
),以生成所需的输出

如果一行中出现多个术语,它们都将被推到前面。如果这是一个问题,有一些方法可以解决,但它们不是特别整洁(尽管大多数问题来自使用
sed
生成
sed
脚本)


在Ubuntu 14.04版本上测试。

您可以使用
sed
grep
的输出进行如下后处理-假设您有Bash和:

\
是一些版本的
sed
支持标记单词开头和结尾的老式符号。实际上,除非您需要搜索列表中另一个单词的子字符串(因此,如果您需要搜索
ABCD
ABCDEF
,则必须使用结束标记),否则可能不需要这些标记

sed
脚本输出通过过程替换提供给外部
sed
,并对
grep
的输出进行后处理(
grep-F
相当于
fgrep
),以生成所需的输出

如果一行中出现多个术语,它们都将被推到前面。如果这是一个问题,有一些方法可以解决,但它们不是特别整洁(尽管大多数问题来自使用
sed
生成
sed
脚本)


在Ubuntu 14.04版本上测试。

您可以使用
sed
grep
的输出进行如下后处理-假设您有Bash和:

\
是一些版本的
sed
支持标记单词开头和结尾的老式符号。实际上,除非您需要搜索列表中另一个单词的子字符串(因此,如果您需要搜索
ABCD
ABCDEF
,则必须使用结束标记),否则可能不需要这些标记

sed
脚本输出通过过程替换提供给外部
sed
,并对
grep
的输出进行后处理(
grep-F
相当于
fgrep
),以生成所需的输出

如果一行中出现多个术语,它们都将被推到前面。如果这是一个问题,有一些方法可以解决,但它们不是特别整洁(尽管大多数问题来自使用
sed
生成
sed
脚本)


在Ubuntu 14.04版本上测试。

您可以使用
sed
grep
的输出进行如下后处理-假设您有Bash和:

\
是一些版本的
sed
支持标记单词开头和结尾的老式符号。实际上,除非您需要搜索列表中另一个单词的子字符串(因此,如果您需要搜索
ABCD
ABCDEF
,则必须使用结束标记),否则可能不需要这些标记

sed
脚本输出通过过程替换提供给外部
sed
,并对
grep
的输出进行后处理(
grep-F
相当于
fgrep
),以生成所需的输出

如果一行中出现多个术语,它们都将被推到前面。如果这是一个问题,有很多方法可以解决,但它们并不特别重要
s/.*\(\<DEFB106A\>\).*/\1 &/
s/.*\(\<ZXFGH456\>\).*/\1 &/
s/.*\(\<ANKRD23\>\).*/\1 &/
s/.*\(\<FNTDRE2433\>\).*/\1 &/