$ awk -F: '$1 != p && /RESULT/ { print; p = $1 }' file
ligand_06278/out.pdbqt:REMARK VINA RESULT: -8.3 2.094 2.612
ligand_06279/out.pdbqt:REMARK VINA RESULT: -6.1 9.841 13.115
ligand_06280/out.pdbqt:REMARK VINA RESULT: -10.0 3.811 7.264
Isso gera a primeira linha RESULT
de cada arquivo mencionado no arquivo de entrada. Ele faz isso comparando a primeira coluna (o nome do arquivo) com a primeira coluna da linha anterior e testando se a linha atual contém a palavra RESULT
. Quando uma linha RESULT
for encontrada com um nome de arquivo diferente do anterior, a linha será impressa como está e o valor de p
será atualizado.
Estou percebendo que o arquivo de entrada se parece muito com o resultado de grep
ter sido executado em vários arquivos, possivelmente usando REMARK
.
Para localizar todos os arquivos e obter a primeira linha correspondente a REMARK VINA RESULT
de cada:
find . -type f -path './ligand_*' -name 'out.pdbqt' -exec sed -n '/REMARK VINA RESULT/{p;q;}' {} ';'
ou, como um simples loop:
for name in ligand_*/out.pdbqt; do
grep -F 'REMARK VINA RESULT' "$name" | head -n 1
done
Eu usei diferentes abordagens aqui, você escolhe aquela que parece mais natural.