我有两个文件,让我们说
文件1:
Locus_1
Locus_2
Locus_3
Run Code Online (Sandbox Code Playgroud)
文件2:
3 3 Locus_1 Locus_40 etc_849
3 2 Locus_2 Locus_94 *
2 2 Locus_6 Locus_1 *
2 3 Locus_3,Locus_4 Locus_50 *
3 3 Locus_9 Locus_3 etc_667
Run Code Online (Sandbox Code Playgroud)
我想要做一个grep -F
为所述第一文件仅在所述第二文件的第三列(在原始File2
字段由制表符是分开的),如输出应为:
输出:
3 3 Locus_1 Locus_40 etc_849
3 2 Locus_2 Locus_94 *
2 3 Locus_3,Locus_4 Locus_50 *
Run Code Online (Sandbox Code Playgroud)
我该怎么做?
Edit To Chaos:不,逗号不是错误。我可以在一列中包含多个 Locus_* - 万一第二个 Locus_*(逗号后面的那个)也匹配File1
我希望检索它的行之一!
假设我有这两个文件:
1.
Locus_1 univ
Locus_2 anc
Locus_3 cat
Run Code Online (Sandbox Code Playgroud)
2.
university GO:000001
impromptu GO:000002
advanced GO:000003
inheritance GO:000004
Run Code Online (Sandbox Code Playgroud)
我想在文件 #2 上对文件 #1 的 $2 执行 grep -f,但我还想检索第一个文件的行和与文件 #1 的 $2 匹配的文件 #2 的整行。
基本上,我希望我的输出是这样的
Locus_1 univ university GO:000001
Locus_2 anc advanced GO:000003
Run Code Online (Sandbox Code Playgroud)
我怎样才能做到这一点?我以为我可以用for
循环逐行解析第一个文件,然后将该行存储在一个变量中,但我无法成功。
我在 Windows 上使用 Cygwin shell。
我试图将四个大文件连接成两个。文件 *_1P.gz 包含的行数与对应的 *_2P.gz 行数相同。
文件A_1P.gz
和A_2P.gz
两者都包含1104507560
行。
文件B_1P.gz
和B_2P.gz
两者都包含1182136972
行。
但是,cat A_1P.gz B_1P.gz > C_1P.gz| wc -l
返回186974687
行和cat A_2P.gz B_2P.gz > C_2P.gz| wc -l
返回182952523
行,因此两者不仅比两个输入文件小得多(它们的长度应该超过 2B 行,而小于 2M),而且它们的行数也不同。运行的命令没有显示任何错误。
我无法理解发生了什么,我也生成了这四个大文件cat
并且它运行正常。
cat
?我在 CentOS 服务器上工作。我还有 197G 的空间,所以这应该不是问题(或者至少应该显示错误)。
我有一个具有以下结构的文件:
Locus7625186 GO0004866
Locus7625186 GO0010951
Locus7625186 GO0005615
Locus7625186 GO0016021
Locus7360093 GO0004712
Locus7360093 GO0007093
Locus1507198 GO0044212
Locus1507198 GO0045944
Locus1507198 GO0005634
Locus1507198 GO0036464
Locus1507198 GO0046982
Run Code Online (Sandbox Code Playgroud)
我需要将其转换为:
Locus7625186 GO0004866 GO0010951 GO0005615 GO0016021
Locus7360093 GO0004712 GO0007093
Locus1507198 GO0044212 GO0045944 GO0005634 GO0036464 GO0046982
Run Code Online (Sandbox Code Playgroud)
请注意,GOxxxxxxx
共享相同第一列匹配的数量各不相同。