gpt4 book ai didi

awk - Grep 文本垂直

转载 作者:行者123 更新时间:2023-12-05 08:20:03 24 4
gpt4 key购买 nike

我有一个这样的文本文件

scaffold20  6146680 .   T   C   44.4146 .   DP=2;VDB=0.02;SGB=-0.4
scaffold20 6146696 . G A 8.13869 . DP=1;SGB=-0.379885;MQ0
scaffold20 6146760 . A G 8.13869 . DP=1;SGB=-0.379885;MQ0
scaffold20 6146785 . A G 8.13869 . DP=1;SGB=-0.379885;MQ0
scaffold20 6146864 . A C 153 . DP=7;VDB=0.637622;SGB
scaffold20 6146867 . G A 11.4845 . DP=8;VDB=0.82;SGB=-0.45
scaffold20 6146914 . G A 20.2676 . DP=5;VDB=0.06;SGB=-0.45
scaffold20 6147094 . G A 44.4146 . DP=2;VDB=0.44;SGB=-0.45
scaffold20 6147165 . C T 8.13869 . DP=1;SGB=-0.379885;MQ0F=
scaffold20 6147166 . A G 8.13869 . DP=1;SGB=-0.37

如果第4列有这个序列我需要打印

  A
A
G

像这样

scaffold20  6146785 .   A   G   8.13869 .   DP=1;SGB=-0.379885;MQ0
scaffold20 6146864 . A C 153 . DP=7;VDB=0.637622;SGB
scaffold20 6146867 . G A 11.4845 . DP=8;VDB=0.82;SGB=-0.45

Grep 里有什么选项吗?

最佳答案

最好使用 awk 在列中垂直 Grep。这是一个快速的方法。

awk -v s="AAG" 'BEGIN{n=length(s);t=sprintf("%*s",n," ")}
{b[FNR%n]=$0; t=substr(t,2)$4}
(t==s) { for(i=1;i<=n;++i) print b[(FNR+i)%n] }' file

当您必须搜索特定字符串时,上面的代码非常有效。当你想搜索一个正则表达式时,你必须做一些不同的事情。对于大文件,需要双 channel 算法:

awk -v s="ERE" '(NR==FNR){t=t $4; next}
(e<FNR) { if match(t,s) {b=RSTART+e;e=e+RSTART+RLENGTH-1} else exit}
(b<=FNR && FNR<=e)' file file

关于awk - Grep 文本垂直,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63485079/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com