【问题标题】:Modifying Text files with awk or sed or both (again)使用 awk 或 sed 或两者(再次)修改文本文件
【发布时间】:2013-01-26 11:16:08
【问题描述】:

真的很抱歉,我遇到了同样的问题 - awk 和 sed

我想转换包含以下内容的大文本文件:

>hg19_ct_UserTrack_3545_12513 range=chr1:52035541-52035716 5'pad=0 3'pad=0 strand=+ repeatMasking=none
CACACATACTTTTATTCAAGCCTCAGAGCAACCCTGCAAAATGAGTATTA
TCTCCACTTTACAATCAGGAGGCTGAGTCATAAGGAGGTGAGTCACCTGC
CTAGGGCCACATAGCTAGCAAGGAGCCAAGCTGGAATTTTAAGCCACGTT
TGTCTGATTCTTTCTGCATACCATGC
>hg19_ct_UserTrack_3545_13212 range=chr1:186122154-186122314 5'pad=0 3'pad=0 strand=+ repeatMasking=none
ATCTTCAGGGACAAGTTTTTACAAACTCTCTTAATGGTTTTACCACCCTC
CCTATCAGGACCAAGATCAAATACTTGATGTAAGGCATTTGTTTAATTTT
CTTTAGACAAAGAGGATAGTAATTCTTGCATAAACGTTTTTGTGTATCAT
CCATAAAATAT

等等等等

收件人:

>range=chr1:52035541-52035716 5'pad=0 3'pad=0 strand=+ repeatMasking=none
CACACATACTTTTATTCAAGCCTCAGAGCAACCCTGCAAAATGAGTATTA
TCTCCACTTTACAATCAGGAGGCTGAGTCATAAGGAGGTGAGTCACCTGC
CTAGGGCCACATAGCTAGCAAGGAGCCAAGCTGGAATTTTAAGCCACGTT
TGTCTGATTCTTTCTGCATACCATGC
>range=chr1:186122154-186122314 5'pad=0 3'pad=0 strand=+ repeatMasking=none
ATCTTCAGGGACAAGTTTTTACAAACTCTCTTAATGGTTTTACCACCCTC
CCTATCAGGACCAAGATCAAATACTTGATGTAAGGCATTTGTTTAATTTT
CTTTAGACAAAGAGGATAGTAATTCTTGCATAAACGTTTTTGTGTATCAT
CCATAAAATAT

我尝试了awk 'NR==1{sub(/^[^ ]* /,"")} 1'sed -i '1s/\w\+ //',但没有任何效果。

【问题讨论】:

  • 那么,这些是多行记录吗?我以为它们只是为了演示而包装好的。如果是这样,记录的开头是什么,类似于 hg19_ct_UserTrack_3545_13212?最终结果是否只是一个长字符串,没有那些 UserTrack 字段?

标签: unix text sed awk


【解决方案1】:

您似乎只想删除第一个字段,直到第一个空格。你可以这样做:

cut -f2- -d ' '

【讨论】:

  • 不是真的,检查第 1861223 行...和最后一行...我不知道规则是什么... :)
【解决方案2】:

我假设您想删除以大于号开头的行中的第一个单词。在这种情况下,您可以像这样使用awk

awk '{sub(/^>[^ ]* /,">")} 1'

去掉限制,NR==1 表示后面的块只会在第一行执行。还要在模式和替换中包含>

输出:

>range=chr1:52035541-52035716 5'pad=0 3'pad=0 strand=+ repeatMasking=none
CACACATACTTTTATTCAAGCCTCAGAGCAACCCTGCAAAATGAGTATTA
TCTCCACTTTACAATCAGGAGGCTGAGTCATAAGGAGGTGAGTCACCTGC
CTAGGGCCACATAGCTAGCAAGGAGCCAAGCTGGAATTTTAAGCCACGTT
TGTCTGATTCTTTCTGCATACCATGC
>range=chr1:186122154-186122314 5'pad=0 3'pad=0 strand=+ repeatMasking=none
ATCTTCAGGGACAAGTTTTTACAAACTCTCTTAATGGTTTTACCACCCTC
CCTATCAGGACCAAGATCAAATACTTGATGTAAGGCATTTGTTTAATTTT
CTTTAGACAAAGAGGATAGTAATTCTTGCATAAACGTTTTTGTGTATCAT
CCATAAAATAT

【讨论】:

    【解决方案3】:

    这是使用sed的一种方式:

    sed '/^>/s/[^ ]* />/' file
    

    结果:

    >range=chr1:52035541-52035716 5'pad=0 3'pad=0 strand=+ repeatMasking=none
    CACACATACTTTTATTCAAGCCTCAGAGCAACCCTGCAAAATGAGTATTA
    TCTCCACTTTACAATCAGGAGGCTGAGTCATAAGGAGGTGAGTCACCTGC
    CTAGGGCCACATAGCTAGCAAGGAGCCAAGCTGGAATTTTAAGCCACGTT
    TGTCTGATTCTTTCTGCATACCATGC
    >range=chr1:186122154-186122314 5'pad=0 3'pad=0 strand=+ repeatMasking=none
    ATCTTCAGGGACAAGTTTTTACAAACTCTCTTAATGGTTTTACCACCCTC
    CCTATCAGGACCAAGATCAAATACTTGATGTAAGGCATTTGTTTAATTTT
    CTTTAGACAAAGAGGATAGTAATTCTTGCATAAACGTTTTTGTGTATCAT
    CCATAAAATAT
    

    【讨论】:

      猜你喜欢
      • 2013-02-18
      • 2015-03-19
      • 1970-01-01
      • 1970-01-01
      • 2013-02-18
      • 2014-12-10
      • 2012-01-01
      • 2011-01-10
      相关资源
      最近更新 更多