linux - Grep 长度为 3 的行

标签 linux bash grep

你好,我有一张看起来像这样的 table :

chr10   84890986        84891021        2       17.5    2       93      0       61      48      2       48      0       1.16    GA
chr10   84897562        84897613        2       25.5    2       100     0       102     50      49      0       0       1       AC
chr10   84899819        84899844        2       12.5    2       100     0       50      0       0       52      48      1       GT
chr10   84905282        84905318        6       5.8     6       87      6       54      80      19      0       0       0.71    AAAAAC
chr10   84955235        84955267        2       16      2       100     0       64      50      0       0       50      1       AT
chr10   84972254        84972288        2       17      2       93      0       59      2       0       47      50      1.16    GT
chr10   85011399        85011478        3       25.7    3       80      12      63      58      1       40      0       1.06    GAA
chr10   85011461        85011525        3       20.7    3       87      6       74      39      0       60      0       0.97    GAG
chr10   85014721        85014841        5       23.8    5       78      8       66      0       69      0       29      1       TTCCC
chr10   85021530        85021701        5       38.4    5       84      13      53      74      0       24      0       0.85    AAGAG
chr10   85045413        85045440        3       9       3       100     0       54      66      33      0       0       0.92    CAA
chr10   85059334        85059364        5       6       5       92      0       51      20      3       0       76      0.92    ATTTT
chr10   85072010        85072038        2       14      2       100     0       56      50      50      0       0       1       CA
chr10   85072037        85072077        4       10      4       84      10      55      25      22      0       52      1.47    ATCT
chr10   85084308        85084338        6       5       6       91      0       51      83      13      3       0       0.77    CAAAAA
chr10   85096597        85096640        3       14.7    3       95      4       79      69      30      0       0       0.88    AAC
chr10   85151154        85151190        6       6.5     6       87      12      51      0       11      0       88      0.5     TTTCTT
chr10   85168255        85168320        4       16.2    4       100     0       130     50      0       49      0       1       AGGA
chr10   85173155        85173184        2       14.5    2       100     0       58      48      0       0       51      1       TA
chr10   85196836        85196861        2       12.5    2       100     0       50      52      48      0       0       1       AC
chr10   85215511        85215546        2       17.5    2       100     0       70      51      48      0       0       1       AC
chr10   85225048        85225075        2       13.5    2       100     0       54      51      48      0       0       1       AC
chr10   85242322        85242357        2       17.5    2       93      0       61      0       2       48      48      1.16    TG
chr10   85245934        85245981        4       11      4       79      20      51      27      2       0       70      0.99    ATTT
chr10   85249139        85249230        5       18.8    5       88      6       116     0       60      0       39      0.97    TTCCC
chr10   85251100        85251153        5       11      5       97      2       92      0       0       37      62      0.96    GTTTG
chr10   85268725        85268752        4       6.8     4       100     0       54      0       25      0       74      0.83    CTTT
chr10   85268767        85268798        4       7.8     4       100     0       62      0       0       22      77      0.77    TTTG
chr10   85269189        85269239        6       8.8     6       79      16      54      84      2       12      2       0.8     AAAAGA
chr10   85330217        85330253        2       18      2       100     0       72      0       0       50      50      1       TG
chr10   85332256        85332314        4       15      4       82      7       75      70      1       27      0       0.97    AAGA
chr10   85337969        85337996        2       13.5    2       100     0       54      0       0       48      51      1       TG
chr10   85344795        85344957        2       75.5    2       83      12      198     45      4       3       45      1.42    TA
chr10   85349732        85349765        5       6.8     5       93      6       59      84      15      0       0       0.61    AAAAC
chr10   85353082        85353109        5       5.4     5       100     0       54      0       22      18      59      1.38    CTGTT

我想提取所有在最后一列中有 3 个字符且只有 3 个字符的行。到目前为止,我的尝试是这样的:

grep -E "['ACTG']['ACTG']['ACTG']{1,3}$"

但这给了我从 3 到大于 3 的一切。我尝试了很多不同的组合,但似乎没有什么能给我我想要的。有什么想法吗?

最佳答案

如果你想尝试 awk,你可以这样做:

awk '$NF~/\<...\>/' file
chr10   85011399        85011478        3       25.7    3       80      12      63      58      1       40      0       1.06    GAA
chr10   85011461        85011525        3       20.7    3       87      6       74      39      0       60      0       0.97    GAG
chr10   85045413        85045440        3       9       3       100     0       54      66      33      0       0       0.92    CAA
chr10   85096597        85096640        3       14.7    3       95      4       79      69      30      0       0       0.88    AAC

它将测试最后一个字段 $NF 是否有 3 个字符 ...
这个正则表达式也可以:awk '$NF~/^...$/'

或者如果您需要精确的字符。 (PS 这需要 awk 4.x,或使用开关 --re-interval)

awk '$NF~/^[ACTG]{3}$/' file

使用 grep

grep -E " [ACTG]{3}$" file
chr10   85011399        85011478        3       25.7    3       80      12      63      58      1       40      0       1.06    GAA
chr10   85011461        85011525        3       20.7    3       87      6       74      39      0       60      0       0.97    GAG
chr10   85045413        85045440        3       9       3       100     0       54      66      33      0       0       0.92    CAA
chr10   85096597        85096640        3       14.7    3       95      4       79      69      30      0       0       0.88    AAC

您需要空格来分隔最后一列,{3} 以获得 3 个且仅 3 个字符。

关于linux - Grep 长度为 3 的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26423052/

相关文章:

regex - 为什么这个正则表达式不起作用?

Java ProcessBuilder + bash : "No such file or directory"

objective-c - 在 Cocoa OSX 中执行 SSHFS 脚本

linux - 在 Lua 中写一个守护进程

java - 试图定位泄漏点! anon 对 pmap 意味着什么?

regex - Awk:如何处理文件夹和子文件夹中的多个 files.txt?

linux - 查找某些字符串序列的出现次数

vim - 如何显示最后一次在 vim 中执行的命令?

linux - Windows 上的 Ubuntu 上的 Bash 上的 Hadoop 权限被拒绝

linux - shell中的动态变量