распечатать определенную строку из нескольких файлов

У меня есть коллекция из 5000+ файлов, и я просто хочу создать файл output.txt который содержит 27-ю строку всего файла вместе с именем файла. хорошо, что я noob на уровне Linux, так что я получил из Интернета, чтобы выбрать определенную строку из одного файла, используя команды awk или sed как $sed -n 27p *.txt >>output.txt

например, мои файлы в каталоге:

  log_1.txt
 log_2.txt
 log_3.txt
 log_4.txt
 ,
 ,
 ,

Я хочу 27-ю строку каждого файла с именем файла перед или позади печатной строки в новом файле output.txt .

  • sed с множественным выражением для аргумента на месте
  • Как я могу получить много адресов из многих траекторий с помощью сценария bash без ошибок?
  • Улучшить команду sed для замены первого экземпляра символа и всех следующих символов?
  • Sed, которая игнорирует любой комментарий
  • Проблема удаления / замены специального символа °
  • «Скобки не сбалансированы», хотя я избежал этого?
  • Как я могу группировать числа в файле
  • Текст между двумя тегами
  • 4 Solutions collect form web for “распечатать определенную строку из нескольких файлов”

      awk 'FNR==27 {print FILENAME, $0}' *.txt >output.txt 
    • FILENAME – встроенная переменная awk для текущего имени входного файла
    • FNR ссылается на номер строки текущего файла
    • $0 означает целую строку

    Использование цикла for :

     { for i in *.txt; do echo "$i : $(sed -n '27p' "$i")"; done ;} >output.txt 

    Цикл for может быть дорогим, так как у вас есть 5000+ файлов, но с учетом текущих аппаратных средств не должно быть проблемой.


    Ускоренный способ, покидая sed после строки 27 (спасибо @Fiximan) :

     { for i in *.txt; do echo "$i : $(sed -n '27p;q' "$i")"; done ;} >output.txt 

    Другая возможность:

     for i in * ; do echo -n $i" : " ; head -n 27 "$i" | tail -n 1 ; done > output.txt 

    Простое использование awk:

     awk 'FNR==27 {print FILENAME,$0}' /path/to/files/log_*.txt > outfile.txt 
    Linux и Unix - лучшая ОС в мире.