【问题标题】:extracting segments from a file with awk使用 awk 从文件中提取段
【发布时间】:2012-08-18 06:12:38
【问题描述】:

我有一个文件,我需要根据另一个文件中给出的字符范围从中提取段。我想使用 awk 命令来完成。

文件一看起来像这样(单行):

AATTGTGAAGGTAGATGGCTCGCTCCGCGGCGGGGCGCGCGCGCGCGCGCGGGCTCGCTATATAGAGATATATGCGCGCGGCGCGCGGCGCGCGCGGCGCGCGCGTATATATATAGGCGCGCGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGAAAAAAAAAAAAAAAAAAAAAAAAATTTTTTTTTTTTTTTTTTTTTTTTTTTTTTGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGCCCCCCCCCCCCCC

第二个文件如下所示:

5 10
13 20
22 24

输出将是:

GTGAAG
AGATGGCT
GCT

【问题讨论】:

    标签: awk


    【解决方案1】:

    这一条线将解决您的问题:

    awk 'BEGIN{getline sequence < "first_file"} {print substr(sequence, $1, $2 - $1 + 1) }' second_file

    解释:该脚本使用getline函数从名为first_file的文件中读取字符串sequence(调整为实际文件名)。然后对于第二个文件的每一行(包含处理范围),它使用substr 函数提取必要的子字符串。 substr 接受三个参数:字符串(sequence)、位置($1)和长度($2 - $1 + 1)。

    【讨论】:

    • 谢谢。非常感谢解释!
    【解决方案2】:

    Nya 为您提供了awk 解决方案,这是基于coreutils 的解决方案。

    字符串

    AATTGTGAAGGTAGATGGCTCGCTCCGCGGCGGGGCGCGCGCGCGCGCGCGGGCTCGCTATATAGAGATATATGCGCGCGGCGCGCGGCGCGCGCGGCGCGCGCGTATATATATAGGCGCGCGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGAAAAAAAAAAAAAAAAAAAAAAAAATTTTTTTTTTTTTTTTTTTTTTTTTTTTTTGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGCCCCCCCCCCCCCC
    

    关闭

    5 10
    13 20
    22 24
    

    你可以得到你想要的输出:

    while read off len; do cut -c${off}-${len} string; done < offlen
    

    输出:

    GTGAAG
    AGATGGCT
    GCT
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-05-29
      • 2013-05-09
      • 1970-01-01
      • 1970-01-01
      • 2012-06-09
      相关资源
      最近更新 更多