не понятно что голова -3 *.txt | awk '{напечатать $4}' возвращается сюда, так как вы не показали нам образцы ваших файлов, однако sed -i 's/GLN/LOO/g' *.txt заменит все экземпляры GLN в все линии в все файлы, соответствующие *.текст, если цикл выполняется хотя бы один раз.
AFAIK нет прямого способа решить последнюю н строки файла в sed - поэтому, чтобы использовать это, вам нужно будет вычислить смещение извне, используя туалет -л и арифметика оболочки, например:
для ф в *.txt; делать
start=$(( $(wc -l <"$f") - 9 ))
sed "$start"',$s/GLN/LOO/g' "$f"
сделано
(я удалил -я поэтому вывод идет на терминал для тестирования). Вы можете использовать что-то вроде awk 'END{print NR-9}' "$f" на месте $(( $(wc -l <"$f") - 9 )) чтобы получить начальное смещение, если вы намеревались использовать awk.
В качестве альтернативы вы можете использовать так инвертировать файл и сделать замены в первом н линии, затем так результат - хотя это усложняет замену на месте.
В этой ситуации я, вероятно, потянулся бы к ред. или же бывший которые поддерживают смещения числовых адресов, например. тестирование с выводом на терминал:
для ф в *.txt; делать
printf '%s\n' '$-9,$s/GLN/LOO/g' ',p' | ред -с "$f"
сделано
Как только вы будете довольны тем, что все работает правильно, измените ,п к wq к жзаписать результат в файл (эквивалент sed -я).