我想将第 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
想法的几个变体:
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
您正在处理 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