从文件中提取字符串部分,并与文件名一起存储为列表

时间:2020-02-11 05:13:22

标签: shell unix awk sed grep

我有几个看起来像这样的文件。

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 个答案:

答案 0 :(得分:3)

能否请您尝试以下。使用最新版本的GNU nextfile中的awk,一旦找到匹配的行将跳过文件读取,这也将进一步节省我们的时间。

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

如果您的awk中没有nextfile,请尝试关注。

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