linux – 如何使用sed或Perl删除多行块中的部分行?

linux – 如何使用sed或Perl删除多行块中的部分行?,第1张

概述我有一些看起来像这样的数据.它有四个块.每个块都以@字符开头. @SRR037212.1 FC30L5TAA_102708:7:1:741:1355 length=27AAAAAAAAAAAAAAAAAAAAAAAAAAA+SRR037212.1 FC30L5TAA_102708:7:1:741:1355 length=27::::::::::::::::::::::::;;8@SRR03 我有一些看起来像这样的数据.它有四个块.每个块都以@字符开头.

@SRR037212.1 FC30L5TAA_102708:7:1:741:1355 length=27AAAAAAAAAAAAAAAAAAAAAAAAAAA+SRR037212.1 FC30L5TAA_102708:7:1:741:1355 length=27::::::::::::::::::::::::;;8@SRR037212.2 FC30L5TAA_102708:7:1:1045:1765 length=27TATAACCAGAAAGTTACAAGTAAACAC+SRR037212.2 FC30L5TAA_102708:7:1:1045:1765 length=27888888888888888888888888888

在每个块的第三行,我想删除字符后面的文本,导致:

@SRR037212.1 FC30L5TAA_102708:7:1:741:1355 length=27AAAAAAAAAAAAAAAAAAAAAAAAAAA+::::::::::::::::::::::::;;8@SRR037212.2 FC30L5TAA_102708:7:1:1045:1765 length=27TATAACCAGAAAGTTACAAGTAAACAC+888888888888888888888888888

在sed或Perl中有一个紧凑的方法吗?

解决方法 如果第一行或第二行中永远不存在a并且第三行总是存在一个:

perl -0100pi -e's/\+.*/+/' datafile

除此以外:

perl -0100pi -e's/^((?:.*\n){2}.*?\+).*//' datafile

或者在5.10上:

perl -0100pi -e's/^(?:.*\n){2}.*?\+\K.*//' datafile

所有那些假设@只出现在一个块的开头.如果它可能出现在其他地方,那么:

perl -pi -e's/\+.*/+/ if $. % 4 == 3' datafile
总结

以上是内存溢出为你收集整理的linux – 如何使用sed或Perl删除多行块中的部分行?全部内容,希望文章能够帮你解决linux – 如何使用sed或Perl删除多行块中的部分行?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/1023787.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-23
下一篇 2022-05-23

发表评论

登录后才能评论

评论列表(0条)

保存