【问题标题】:How to trim every nth line?如何修剪每第n行?
【发布时间】:2021-03-28 04:27:25
【问题描述】:

我想剪掉每 4 行的前 9 个字符。我可以使用cut -c 9,但我不知道如何只选择每 4 行,而不会丢失其余行。

输入:

@V300059044L3C001R0010004402
AAGTAGATATCATGGAGCCG
+
FFFGFGGFGFGFFGFFGFFGGGGGFFFGG
@V300059044L3C001R0010009240
AAAGGGAGGGAGAATAATGG
+
GFFGFEGFGFGEFDFGGEFFGGEDEGEGF

输出:

@V300059044L3C001R0010004402
AAGTAGATATCATGGAGCCG
+
FGFFGFFGFFGGGGGFFFGG
@V300059044L3C001R0010009240
AAAGGGAGGGAGAATAATGG
+
FGEFDFGGEFFGGEDEGEGF

【问题讨论】:

    标签: bash awk cut fastq


    【解决方案1】:

    您能否尝试在 GNU awk 中使用所示示例进行跟踪、编写和测试。

    awk 'FNR%4==0{print substr($0,10);next} 1' Input_file
    

    或者按照@tripleee 的建议(在 cmets 中)尝试:

    awk '!(FNR%4) { $0 = substr($0, 10) }1' Input_file
    

    说明:为上述添加详细说明。

    awk '                   ##Starting awk program from here.
    FNR%4==0{               ##Checking condition if this line number is fully divided by 4(every 4th line).
      print substr($0,10)   ##Printing line from 10th character here.
      next                  ##next will skip all further statements from here.
    }
    1                       ##1 will print current Line.
    ' Input_file            ##Mentioning Input_file name here.
    

    【讨论】:

    • 甚至可以重构为awk '!(FNR%4) { $0 = substr($0, 10) }1'
    • 完美解决了第一个问题,谢谢!!!
    • @gnikixam,我认为你在每 4 行截断 9 个字符 + 性能问题都应该由这个恕我直言解决。
    • 是的,没错。但第二个目标是,在这一行的末尾额外删除 XY 字符。例如:第 4 行最后 3 个字符,第 8 行最后 5 个字符等等。这非常耗时
    • @gnikixam,我真的认为两者只是相同的要求:) 最后要删除字符的行在其行号中有任何特定的序列或逻辑吗?请让我知道。
    【解决方案2】:

    GNU sed 可以使用4~4 选择每第四行,例如:

    sed -E '4~4s/.{9}//'
    

    【讨论】:

    • 感谢您的回复!该命令删除了除 9 之外的所有字符,但没关系。 RavinderSingh13 命令运行良好!
    • 应该是sed -E '4~4s/.{9}//' 删除前9个字符
    • @gnikixam:这就是你要求的......我建议阅读并创建一个MCVE
    • @Sundeep:确实,我搞错了
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-05
    • 1970-01-01
    • 2012-01-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多