小编Lin*_*ket的帖子

Grep 特定字段上的文件

我有两个文件,让我们说

文件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我希望检索它的行之一!

command-line grep text-processing

6
推荐指数
2
解决办法
2万
查看次数

显示模式行和匹配行的 Grep

假设我有这两个文件:

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。

grep bash cygwin

4
推荐指数
1
解决办法
4849
查看次数

大文件上的 cat 不起作用

我试图将四个大文件连接成两个。文件 *_1P.gz 包含的行数与对应的 *_2P.gz 行数相同。

文件A_1P.gzA_2P.gz两者都包含1104507560行。
文件B_1P.gzB_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并且它运行正常。

  • 可能是什么问题?
  • 我还有什么其他选项可以在不使用的情况下连接 gzipped 文件cat

我在 CentOS 服务器上工作。我还有 197G 的空间,所以这应该不是问题(或者至少应该显示错误)。

shell compression cat

3
推荐指数
1
解决办法
1492
查看次数

将共享匹配项的列转换为行

我有一个具有以下结构的文件:

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共享相同第一列匹配的数量各不相同。

sed awk text-processing bioinformatics

1
推荐指数
1
解决办法
157
查看次数