【问题标题】:Removing multiple lines based on matches between two separate files根据两个单独文件之间的匹配删除多行
【发布时间】:2015-10-12 15:05:37
【问题描述】:

我有一个大文件(.fastq 1.6Gb),其中每个条目是四行,其中一个新条目从以 @ 开头的行开始:

@SRR392137.1 I331_3_FC302WFAAXX:3:1:225:1941 length=35
GATGGTAGAAACATACGTCTT
+SRR392137.1 I331_3_FC302WFAAXX:3:1:225:1941 length=35
IIIIIIIIIIIIIIIIIIIII
@SRR392137.2 I331_3_FC302WFAAXX:3:1:163:1931 length=35
GAATCATTTTGATAATAATAAGTTC
+SRR392137.2 I331_3_FC302WFAAXX:3:1:163:1931 length=35
IIIIIIIIIIIIIIIIIIIIIIIII
@SRR392137.4 I331_3_FC302WFAAXX:3:1:164:1938 length=35
GACGGGTGAGTAACGCGTAAGAAC
+SRR392137.4 I331_3_FC302WFAAXX:3:1:164:1938 length=35
IIIIIIIIIIIIIIIIIIIIIIII
@SRR392137.5 I331_3_FC302WFAAXX:3:1:233:1936 length=35
GATGGTTTTGTCTGCTTAGATC
+SRR392137.5 I331_3_FC302WFAAXX:3:1:233:1936 length=35
IIIIIIIIIIIIIIIIIIIIII

我有第二个文件,其中包含需要从 .fastq 文件中删除的 ID 列表(总共 500,000 个):

@SRR392137.2
@SRR392137.4

这将包括删除包含字符串的行和下面的 3 行,以便输出文件包含:

@SRR392137.1 I331_3_FC302WFAAXX:3:1:225:1941 length=35
GATGGTAGAAACATACGTCTT
+SRR392137.1 I331_3_FC302WFAAXX:3:1:225:1941 length=35
IIIIIIIIIIIIIIIIIIIII
@SRR392137.5 I331_3_FC302WFAAXX:3:1:233:1936 length=35
GATGGTTTTGTCTGCTTAGATC
+SRR392137.5 I331_3_FC302WFAAXX:3:1:233:1936 length=35
IIIIIIIIIIIIIIIIIIIIII

是否可以使用 grep、sed 或 awk 来执行此操作?

谢谢。

【问题讨论】:

    标签: linux bash awk sed grep


    【解决方案1】:

    由于内存问题和不幸使用管道

    grep -v -f ListToExclude.file file.fastq \
     | sed -u -e '/^@/!d' -e 'N;N;N'
    
    • 从列表中删除 entry 行以删除
    • sed 删除不以@ 开头的行。如果以@ 开头,它还包括接下来要输出的 3 行
      • -u 使用无缓冲选项,在这种情况下很有用

    【讨论】:

      【解决方案2】:
      #!/usr/bin/awk -f
      BEGIN {
        RS = "@"
      }
      NR == FNR {
        z[$1]
        next
      }
      $1 in z {
        next
      }
      {
        printf RS $0
      }
      

      像这样运行:

      alpha.awk list.ids large.fastq
      

      或者

      awk 'NR==FNR {z[$1];next} $1 in z {next} {printf RS$0}' RS=@ list.ids large.fastq
      

      【讨论】:

      • 感谢上面的代码非常适合我的小文件,但是当我在较大的文件上运行它时,我收到以下错误:
      • 我在较大的文件中有一个错误,这些文件总是在同一个条目处停止。我认为它是因为它包含一个@。有没有办法修改代码以将这些考虑在内 @SRR392137.1854 I331_3_FC302WFAAXX:3:1:451:470 length=35 GAGAGAATATAGGATGGGTACCAT +SRR392137.1854 I331_3_FC302WFAAXX:3:1:451:470 length=35 IIIIIIIIIIIIIII@II&I: %$$+
      • @catcha 我不随球门柱移动
      猜你喜欢
      • 1970-01-01
      • 2020-12-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-12
      • 1970-01-01
      相关资源
      最近更新 更多