Извлеките фрагмент строки из файла и сохраните его в виде списка с именем файла - PullRequest
0 голосов
/ 11 февраля 2020

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

RF02883_full.txt

# STOCKHOLM 1.0

#=GF ID   BcKCsr2
#=GF DE   Burkholderia sRNA 2

AM747720.1/2136330-2136461 AUGAAUGCCAGUUCGCCCCAUAUUUCUCGUAGCUGCGC------CGGUGC--------CCGUUG---------------CAAUGCUUCCC----------GGCACCUGACGC---GCAUCACGACG--GCAU-CAGCCGAGCCGCAUGUCCCUGUCGACGGGGCAGCGGCUUUUUUU
BX571965.1/1703315-1703186 AUGAAUGCCUGUCCGACCCAUUUUUCUCGUAGCUGCGC------CGGUGG--------UCCAAA---------------CGAUGCGCCCA----------CGCGCCUGACGCGCAGCACG---ACG--GUUA-AAGCCGAGCCGCUCGCCCCUGUU--CGGGGGAGCGGCUUUUUUU

NF0023_full.txt

# STOCKHOLM 1.0

#=GF ID   B
#=GF DE   B 2

BX57195.1/1703315-1703186 AUGAAUGCCUGUCCGACCCAUUUUUCUCGUAGCUGCGC------CGGUGG--------UCCAAA---------------CGAUGCGCCCA----------CGCGCCUGACGCGCAGCACG---ACG--GUUA-AAGCCGAGCCGCUCGCCCCUGUU--CGGGGGAGCGGCUUUUUUU

Я хочу извлечь первый Идентификатор и сохранить его в новом файле с именем файла: Пример вывода

RF02883 AM747720.1/2136330-2136461
NF0023  BX57195.1/1703315-1703186

Код, который я пробовал до сих пор:

 awk '                             
    /!#=/{                             
      close(file)                     
      file=count=""                  
    }
    (/!#=/ || !NF) && !file{  

}input.txt

1 Ответ

3 голосов
/ 11 февраля 2020

Не могли бы вы попробовать следующее. Использование nextfile, которое есть в последних версиях GNU awk и пропустит чтение файла, как только найдет строку с соответствием, что также сэкономит наше время.

awk '!/^#/ && NF{print FILENAME,$1;nextfile}' *.txt > Output_file

Если у вас нет nextfile в вашем awk попробуйте следующее.

awk 'FNR==1{found=""} !/^#/ && NF && !found{print FILENAME,$1;found=1}' *.txt
...