Usando sed :
for file in *simulation_y_t*; do sed -n '$ s/.*hgip.\{0,16\}$/&/p' "$file"; done
Ele irá verificar a última linha de cada arquivo e se hgip aparecer nos últimos 20 caracteres, a linha será impressa.
Aqui está a versão expandida (imprimindo os nomes dos arquivos também):
#!/bin/bash
for file in *simulation_y_t*; do
line="$(sed -n '$ s/.*hgip.\{0,16\}$/&/p' "$file")"
[[ -n $line ]] && echo "$file: " "$line"
done
-
O% start
$(antes do padrãos///) indica a última linha do arquivo. -
O padrão
hgip.\{0,16\}$garante quehgipocorra apenas com os últimos 20 caracteres da linha -
lineconterá a linha com correspondência -
[[ -n $line ]]testa se o comprimento de$lineé diferente de zero, se for o caso, o arquivo e a última linha correspondente serão impressos.
Isso também pode ser feito usando grep com ajuda de tail :
grep 'hgip.\{0,16\}$' < <(for f in *simulation_y_t*;do tail -1 "$f";done)
Aqui a lógica é igual a sed , além disso, tail -1 nos dará as últimas linhas dos arquivos para que possamos executar grep sobre eles.
EDITAR:
Se você quiser excluir a última linha, se ela corresponder às condições, use:
!/bin/bash
for file in *simulation_y_t*; do
[[ -n "$(sed -n '$ s/.*hgip.\{0,16\}$/&/p' "$file")" ]] && sed -i.bak '$d' "$file"
done
O arquivo original será mantido com uma extensão .bak , se você não quiser usar apenas -i em vez de -i.bak .