Самый быстрый способ прочитать последнюю строку в шаблоне нескольких файлов с тем же расширением

У меня есть в каталоге /home/files/ некоторые файлы, у которых все одинаковое расширение .txt .

Например

 1.txt 2.txt 3.txt 4.txt 5.txt test.txt 

Эти файлы все одинаковы в формате данных, но данные разные. Все эти файлы имеют по крайней мере следующую строку внутри

 frames=[number here] 

Эта строка появляется несколько раз в файле, поэтому мне нужно получить значение frames= которое появляется последним в файле.

И поскольку я заявил, что хочу получить эту строку, из всех вышеперечисленных файлов, которые соответствуют расширению .txt в каталоге (нет необходимости в рекурсивном).

Есть ли одна команда bash для этого?

РЕДАКТИРОВАТЬ

Ожидаемый результат:

 1.txt=5000 2.txt=123 3.txt=3452 4.txt=111 5.txt=958 test.txt=1231 

С помощью find + grep :

 find . -name '*.txt' -exec sh -c 'grep -HPo "frames=\K.*" "$0" | tail -n1' {} \; 

И с оболочкой for цикла + grep аналогичным образом:

 for file in *.txt; do grep -HPo 'frames=\K.*' "$file" | tail -n1; done 

Используя gawk и при условии, что на линии будет только один = , вы можете сделать:

 gawk -F= 'ENDFILE { print FILENAME"="$2 }' *.txt 

Обновить

Просто понял, что я неправильно понял этот вопрос, я думал, что линия, которую вы искали, всегда была последней строкой. Чтобы использовать последнюю строку, которая начинается с frames= , для gawk выполните:

 gawk -F= '/^frames=/ { frames=$2 } ENDFILE { print FILENAME"="frames }' *.txt 

Или с любым awk :

 for file in *.txt; do awk -F= '/^frames=/ { frames=$2 } END { print FILENAME"="frames }' "$file" done 

Вы можете сделать это с помощью awk

 awk -F= '/^frame/{line=FILENAME "=" $2}NR!=1 && FNR==1{print line}END{print line}' *.txt 

Или с sed (версия GNU более 4.2.2)

 sed -sn '/^frame/{s///;h};${F;x;p}' *.txt | sed 'N;s/\n//' 

С помощью pax (возможно, и большинства других tar ) и tr и GNU sed :

 pax -w ./*txt | tr -s \\0 | sed -nz '/txt$/h /\n*.*frames\(=[0-9]*\).*\n/!d H;x;s//\1/p'