小编use*_*408的帖子

快速替代grep -f

file.contain.query.txt

ENST001

ENST002

ENST003
Run Code Online (Sandbox Code Playgroud)

file.to.search.in.txt

ENST001  90

ENST002  80

ENST004  50
Run Code Online (Sandbox Code Playgroud)

因为ENST003在第二个文件中没有条目且ENST004在第一个文件中没有条目,所以预期的输出是:

ENST001 90

ENST002 80
Run Code Online (Sandbox Code Playgroud)

要在特定文件中grep多查询,我们通常执行以下操作:

grep -f file.contain.query <file.to.search.in >output.file
Run Code Online (Sandbox Code Playgroud)

因为我在file.to.search中有10000个查询和几乎100000个原始文件,所以需要很长时间才能完成(比如5个小时).有没有grep -f的快速替代品?

perl awk

10
推荐指数
3
解决办法
3408
查看次数

删除第N次出现后的内容使用单行

我想删除在第四次出现的字符":"之后的任何字段中包含它.看例子:

输入:

1 10975     A C    1/1:137,105:245:99:1007,102,0   0/1:219,27:248:20:222,0,20 
1 19938     T TA   ./.                             1/1:0,167:167:99:4432,422,0,12,12
12 20043112 C G    1/2:3,5,0:15:92                 2/2:3,15:20:8
Run Code Online (Sandbox Code Playgroud)

预期产量:

1 10975     A C    1/1:137,105:245:99   0/1:219,27:248:20 
1 19938     T TA   ./.                  1/1:0,167:167:99
12 20043112 C G    1/2:3,5,0:15:92      2/2:3,15:20:8
Run Code Online (Sandbox Code Playgroud)

所以基本上任何具有":"的字段都应该被删除.请注意,第三行没有任何变化,因为":"仅出现三次.我试过并找到了一个解决方案(不好),它不仅适用于第一行而不适用于secod,因为它有更多的逗号","

不完整的解决方案:

sed 's/:[0-9]*,[0-9]*,[0-9]*//g'
Run Code Online (Sandbox Code Playgroud)

提前致谢

perl awk sed gawk nawk

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

计数每行的出现次数

我有以下文件

ENST001 ENST002 4 4 4 88 9 9
ENST004 3 3 3 99 8 8
ENST009 ENST010 ENST006 8 8 8 77 8 8 
Run Code Online (Sandbox Code Playgroud)

基本上我想计算ENST*在每一行中重复多少次,因此预期的结果是

2
1
3
Run Code Online (Sandbox Code Playgroud)

有什么建议吗?

unix linux awk grep

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

标签 统计

awk ×3

perl ×2

gawk ×1

grep ×1

linux ×1

nawk ×1

sed ×1

unix ×1