Получить данные из файла, используя шаблоны и аннотировать его с именем файла - PullRequest
0 голосов
/ 24 февраля 2020

У меня есть файл с именем bin.001.fasta, который выглядит следующим образом:

>contig_655
GGCGGTTATTTAGTATCTGCCACTCAGCCTCGCTATTATGCGAAATTTGAGGGCAGGAGGAAACCATGAC
AGTAGTCAAGTGCGACAAGC
>contig_866
CCCAGACCTTTCAGTTGTTGGGTGGGGTGGGTGCTGACCGCTGGTGAGGGCTCGACGGCGCCCATCCTGG
CTAGTTGAAC
...

Я хочу получить новый файл, в котором 1-й столбец - это идентификаторы contig, а 2-й столбец - имя файла. без .fasta:

contig_655    bin.001
contig_866    bin.001

Есть идеи как это сделать?

1 Ответ

2 голосов
/ 24 февраля 2020

Не могли бы вы попробовать следующее.

awk -F'>' '
FNR==1{
  split(FILENAME,array,".")
  file=array[1]"."array[2]
}
/^>/{
  print $2,file
}
'  Input_file

ИЛИ более универсальный c, если ваш Input_file содержит более 2 точек, затем выполните следующее.

awk -F'>' '
FNR==1{
  match(FILENAME,/.*\./)
  file=substr(FILENAME,RSTART,RLENGTH-1)
}
/^>/{
  print $2,file
}
'  Input_file

Объяснение: Добавление подробного объяснения для кода выше.

awk -F'>' '                   ##Starting awk program from here and setting field separator as > here for all lines.
FNR==1{                       ##Checking condition if this is first line then do following.
  split(FILENAME,array,".")   ##Splitting filename which is passed to this awk program into an array named array with delimiter .
  file=array[1]"."array[2]    ##Creating variable file whose value is 1st and 2nd element of array with DOT in between as per OP shown sample.
}
/^>/{                         ##Checking condition if a line starts with > then do following.
  print $2,file               ##Printing 2nd field and variable file value here.
}
' Input_file                  ##Mentioning Input_file name here.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...