我有一个文件,我正在尝试为下游分析做准备,但我需要两行中的字符数相同。该文件格式如下,其中第二行(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以引用文本文件。我想知道我是否过于复杂,但我需要线条完全匹配,所以我还没有想到另一种方法去做。任何帮助都会很棒,谢谢!
答案 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行。