Ok, vamos experimentar este pequeno roteiro que eu criei:
#!/usr/bin/env bash
set -e
match1=/home/george/Documents/askubuntu/matchme/match1
match2=/home/george/Documents/askubuntu/matchme/match2
# Create the result file
touch results.txt
while read -r word
do
if [[ "$word" = $(grep -o "$word" "$match1") ]]; then
if [[ "$word" != $(grep -o "$word" "results.txt") ]]
then
grep "$(grep "$word" "$match1" | grep -o "[[:digit:]]..$")" "$match1" >> "results.txt"
while read -r new
do
if [[ "$new" =~ $word ]]; then
# Replace the words
sed -i "s/$word/$new/" "results.txt"
fi
done < <(grep -o "$word_.*\." "$match2" | sed -e 's/\.//')
# Add space between results
echo " " >> "results.txt"
fi
fi
done < <(cut -d"_" -f1 "$match2")
# Remove last blank line from the results file
sed -i '$ d' results.txt
Explicação:
-
match1
: contém a fonte do filtro -
match2
: contém os critérios de filtro -
set -e
: script de parada ocorre erro -
(grep -o "$word_.*\." "$match2" | sed -e 's/\.//')
: leia o arquivo de filtro e pegue os nomes até a extensãopdb
Descrição do processo de comando:
- Usando o comando
cut
, obtenha os critérios de filtro do arquivomatch2
(1KBA, 1A3L, 1F94, 1A3U, 1A3V, 1A4H) e, em seguida, - Leia o resultado do comando
cut
e encontre correspondências no arquivo de fontesmatch1
, - Se uma correspondência for encontrada
grep
para esse bloco no arquivo de origem e enviar ou imprimir para um novo arquivoresult.txt
NOTA: Por favor modifique nomes e outros parâmetros ao seu gosto.
RESULTADOS:
$cat results.txt
3LKB_BUNMU Bungarus multicinctus P01398 PDB; 1KBA_GAL; X-ray; 2.30 A; A/B=22-87.
PDB; 2NBT; NMR; -; A/B=22-87.
3NOJ_BUNCA Bungarus candidus P81782 PDB; 1F94_; X-ray; 0.97 A; A=1-63.
PDB; 1IJC; NMR; -; A=1-63.