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

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

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

  • Как создать интерактивный скрипт bash для сбора аргументов для команды в Linux?
  • Как проверить, установлен ли mysql с помощью сценария bash?
  • Можно ли использовать sed для генерации файла нагрузки для таблицы фактов поиска даты?
  • ошибка сценария bash stty: стандартный ввод: несоответствующий ioctl для устройства
  • рекурсивный поиск шаблона, затем для каждого матча распечатывают конкретный номер строки SEQUENCE: номер файла и отсутствие содержимого файла
  • Как найти и заменить только в нескольких столбцах?
  •   log_1.txt
     log_2.txt
     log_3.txt
     log_4.txt
     ,
     ,
     ,
    

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

  • замените строку строки 6 после сопоставления строки
  • Bash - ожидаемое целочисленное выражение
  • Вывод различных строк при сравнении двух файлов
  • Избавление от линии с идеальным совпадением (не подстрокой) с помощью sed
  • Сценарий оболочки для разблокировки гнома-ключа для школьного интернета при входе в систему
  • как я могу подавить unedsary вывод seds при использовании опции -e?
  • 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 - лучшая ОС в мире.