使用空格和\ n]重新格式化文件格式>

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

我有以下格式的多个文件。这个有3个序列(所有文件中的序列数不同,但总是以“。”结尾),每个序列有40个位置,如第一行中的数字所示。在各行的开头(第一行除外),有序列的名称:

3 40
00076284. ATGTCTGTGG TTCTTTAACC 
00892634. TTGTCTGAGG TTCGTAAACC 
00055673. TTGTCTGAGG TCCGTGAACC 

          GCCGGGAACA TCCGCAAAAA
          ACCGTGAAAC GGGGTGAACT
          TCCCCCGAAC TCCCTGAACG

我需要将其转换为以下格式,即序列是连续的,没有空格也没有\ n,并且在其名称后的新行中。唯一应保留的空格是第一行中的两个数字之间。 >

3 40
00076284. 
ATGTCTGTGGTTCTTTAACCGCCGGGAACATCCGCAAAAA
00892634. 
TTGTCTGAGGTTCGTAAACCACCGTGAAACGGGGTGAACT
00055673. 
TTGTCTGAGGTCCGTGAACCTCCCCCGAACTCCCTGAACG

试图通过sed删除空格和\ n,但不知道如何在第一行之后应用它,以及如何避免形成一个大行。

谢谢

我有以下格式的多个文件。这个有3个序列(序列的数量在所有文件中都不同,但是总是以“。”结尾),每个序列有40个位置,如第一个...

bash text-processing
3个回答
1
投票

这里是一个shell脚本,可以提供您所需的内容:

head -1 input
awk '
NR == 1 {  sequences = $1 ; positions = $2 ; next }
{ 
  if ( $1 ~ /^[0-9]/ ) {
    sid = $1 ; $1 = "" ; sequence_name[ NR - 1 ] = sid 
    sequence[ NR - 1 ] = $0
  } else {
    sequence[ ( NR - 1 )  % ( sequences + 1 ) ]  = sequence[ (NR-1) % ( sequences + 1 ) ] " " $0
  }
}
END {
  for ( x = 1 ; x <= length( sequence_name ) ; x++ )
  {
    print sequence_name[x]
    print sequence[x]
  }
}' input | tr -d ' ' 

0
投票

我认为这应该可行,但是我的输出会更长,因为如果我实际上合并了所有最后的“孤立”序列,我会得到更长的一行。


0
投票

记住空行的位置,并将空行之前的行与之后的行合并:

© www.soinside.com 2019 - 2024. All rights reserved.