匹配两行中的字符数

时间:2014-11-01 19:39:11

标签: regex awk sed

我有一个文件,我正在尝试为下游分析做准备,但我需要两行中的字符数相同。该文件格式如下,其中第二行(CTTATAATGCCGCTCCCTAAG)和第四行(bbbeeeeegggggiiiiiiiiigghiiiiiiiiiiiiiiiiiigeccccb)需要包含相同数量的字符。

@HWI-ST:8:1101:3346:2198#GTCCGC/1
CTTATAATGCCGCTCCCTAAG
+HWI-ST:8:1101:3346:2198#GTCCGC/1
bbbeeeeegggggiiiiiiiiigghiiiiiiiiiiiiiiiiiigeccccb
@HWI-ST:8:1101:10491:2240#GTCCGC/1
GAGTAGGGAGTATACATCAG
+HWI-ST:8:1101:10491:2240#GTCCGC/1
abbceeeeggggfiiiiiigg`gfhfhhifhifdgg^ggdf_`_Y[aa_R
@HWI-ST:8:1101:19449:2134#GTCCGC/1
AAGAAGAGATCTGTGGACCA

到目前为止,我已从每组四个中抽出第二行,并使用以下内容生成一个包含每行长度记录的文件:

grep -v '[^A-Z]' file.fastq |awk '{ print length($0); }' > newfile

现在我只是想找到一种方法来指向这条记录来指示一个sed命令,指出要修剪掉行尾的字符数。类似于:

sed -r 's/.{n}$//' file

用一些正则表达式替换n以引用文本文件。我想知道我是否过于复杂,但我需要线条完全匹配,所以我还没有想到另一种方法去做。任何帮助都会很棒,谢谢!

1 个答案:

答案 0 :(得分:0)

这可能是您正在寻找的内容:

awk '
  # If 2nd line of 4-line group, save length as len.
  NR % 4 == 2 { len = length($0) }

  # If 4th line of 4-line group, trim the line to len.
  NR % 4 == 0 { $0 = substr($0, 1, len)}

  # print every line
  { print }
' file

这假设该文件由4行组成,其中每组的第2行和第4行是您感兴趣的组。它还假设每组的第2行不会超过其相应的第4行。

相关问题