Extraindo nome de arquivo e string de múltiplos arquivos

1

Tenho muitos arquivos (> 100.000) dos quais gostaria de extrair uma string específica e o próprio nome do arquivo. Os arquivos são organizados assim:

Nome do arquivo: sequence.php?ID=gi|90022703|ref|YP_528530.1|

[Random text]

Description: Xylanase/Chitin Deacetylase-Like Protein [Saccharophagus Degradans 2-40]
Source: NCBI-Bacteria
Species: Saccharophagus degradans 2-40

Taxonomy: Bacteria; Proteobacteria; Gammaproteobacteria; Alteromonadales; Alteromonadaceae; Saccharophagus

Eu gostaria de extrair o nome do arquivo (preferencialmente somente após o ID =) e tudo depois de 'Taxonomy' no arquivo.

Algo como:

gi|90022703|ref|YP_528530.1| Bacteria; Proteobacteria; Gammaproteobacteria; Alteromonadales; Alteromonadaceae; Saccharophagus

Isso é possível? (também para vários arquivos, ou seja, acrescentar cada nova informação a um arquivo de saída de texto)

    
por BSP 29.09.2014 / 10:16

2 respostas

2

Ao lidar com vários arquivos, grep imprime cada nome de arquivo antes das correspondências. Já que você não precisa procurar por uma expressão regular, você pode usar a opção -F para procurar por uma string fixa (o que irá acelerar um pouco as coisas); a opção -r informa grep para agir recursivamente. A opção -r é da versão GNU de grep , então não funcionará em sistemas com outras versões do grep.

grep -r -F 'Taxonomy' /path/to/directory

Isso gerará linhas como:

sequence.php?ID=gi|90022703|ref|YP_528530.1|:Taxonomy: Bacteria; Proteobacteria; Gammaproteobacteria; Alteromonadales; Alteromonadaceae; Saccharophagus

Existem várias maneiras de massagear isso na saída desejada; um seria usar cut :

grep -r -F 'Taxonomy' /path/to/directory | cut -d = -f 2 | cut -d : -f 1,3

Isso deve transformar essa linha em:

gi|90022703|ref|YP_528530.1|: Bacteria; Proteobacteria; Gammaproteobacteria; Alteromonadales; Alteromonadaceae; Saccharophagus

Isso não corresponde exatamente ao que você descreveu; você pode colocar | tr -d : no final do pipe se realmente quiser se livrar do cólon. Finalmente, para redirecionar a saída para um arquivo:

grep -r -F 'Taxonomy' /path/to/directory | cut -d = -f 2 | cut -d : -f 1,3 > file.txt

Se você deseja anexar a um arquivo, em vez de sobrescrevê-lo, use >> em vez de > .

    
por 29.09.2014 / 13:29
0
awk '/^Taxonomy:/{t=FILENAME; sub(/^.*\?ID=/, x, t); $1=t; print; close(FILENAME)}' /files/location/* > output.txt
    
por 29.09.2014 / 21:57