将 3 行行中的最后两行合并在一起

问题描述 投票:0回答:2

我想将第 2-3 行合并在一起并保留第 1 行。这是我的文本示例

>chrX:147147161-147148161
ATGATGGTGATGTACAGATGGGTTTTTGG
TTATCTAATTCATGTGTTGGTCAGATCAA
>chrY:16119725-16120725
CAGCTTTGTTCCGTTGCTGGTGAGGAACT
GACTCCCTGGGTGTAGGACCCTCCGAGCC

我想要的样子

>chrX:147147161-147148161
ATGATGGTGATGTACAGATGGGTTTTTGGTTATCTAATTCATGTGTTGGTCAGATCAA
>chrY:16119725-16120725
CAGCTTTGTTCCGTTGCTGGTGAGGAACTGACTCCCTGGGTGTAGGACCCTCCGAGCC

我尝试了几种方法,但到目前为止都没有奏效。这是我一直在努力做的

> sed '/>$/,/>$/ {//b; N; s/\n//;}' file.txt

此命令无法合并我的行。这个我也试过

> paste -d "" - - < txt.file . 

这只会合并我的 chr 行和序列行,这不是我想要的。有人可以给我一些建议吗?谢谢!

awk sed fasta unix-text-processing
2个回答
0
投票

awk
想法的几个变体:

awk '
(NR%3)==2 { line2=$0; next }
(NR%3)==0 { print line2 $0; next }
1
' file.txt

####################

awk '
(NR%3)==2 { line2=$0; next }
          { print line2 $0 }
(NR%3)==0 { line2="" }
' file.txt

这两个都会产生:

>chrX:147147161-147148161
ATGATGGTGATGTACAGATGGGTTTTTGGTTATCTAATTCATGTGTTGGTCAGATCAA
>chrY:16119725-16120725
CAGCTTTGTTCCGTTGCTGGTGAGGAACTGACTCCCTGGGTGTAGGACCCTCCGAGCC

0
投票

您正在处理 FASTA 文件,这些文件可以使用 awk 轻松处理。以下适用于通用 fasta 文件,每个序列一行或多行。

awk 'BEGIN{RS=">";FS="\n";OFS=""}
    (FNR==1){next}
    {name=$1;seq=substr($0,index($0,FS));gsub(FS,OFS,seq)}
    {print RS name FS seq}' file.fasta
© www.soinside.com 2019 - 2024. All rights reserved.