Обработать несколько файлов и распечатать имя файла без расширения и значение определенного ключа

У меня есть файл ASCII, и я хочу вывести имя файла и определенное поле из этого файла рядом друг с другом. Например:
Содержимое файла ASCII «data1.txt» выглядит следующим образом:

Name: John Age: 90 Gender: Male Date: 20160105 

У меня очень длинный список папок. Внутри каждой папки у меня есть файл data1.txt . Файлы имеют тот же дизайн, что и раньше, но контент отличается.

В родительской папке я создал текстовый файл со списком папок, и я назвал его all.txt . Затем я написал следующий сценарий bash:

 #!/bin/bash PAT=PATH TO THE PARENT FOLDER for i in $(cat $PAT/all.txt); do sed -n '/Name:/p' $PAT/$i/data1.txt | awk '{ print $2}' 

Как я могу пересмотреть предыдущий код, чтобы напечатать следующее:

 data1: John 

  • Печать первого и последнего совпадений поля с awk
  • Я хочу обновить INI-файл, используя awk
  • Как правильно форматировать вывод с помощью команды Awk printf?
  • Присоединить (большие) файлы по алфавитно-цифровому шаблону
  • Должен быть лучший способ заменить одиночные новые строки?
  • Только кошка из определенной строки X (с рисунком) в другую определенную строку Y (с рисунком)
  • Помощь с повторением поля A в CSV-файле, где поле B имеет указанное значение
  • Удаление дубликатов каждого X числа строк
  • 2 Solutions collect form web for “Обработать несколько файлов и распечатать имя файла без расширения и значение определенного ключа”

    Вам не нужен файл all.txt , sed или цикл for . find и awk могут сделать все:

     find /path/to/folder -name data1.txt -exec awk -F': ' '/^Name/ {print $2}' + 

    Использование разделителя полей : (двоеточие, за которым следует пробельный символ) является ключом к правильному выводу вывода (без ведущего пространства, поддерживает одно или несколько слов во втором поле)

    Если вы хотите получить имя файла на выходе, измените awk-скрипт на что-то вроде этого:

     find ... -exec awk -F': ' '/^Name/ {print FILENAME": "$2}' + 

    Я сделал следующее, и код работал отлично:

     #!/bin/bash PAT=PATH TO THE PARENT FOLDER for i in $(cat $PAT/all.txt); do echo -n "data1" sed -n '/Name:/p' $PAT/$i/data1.txt | awk '{ print $2}' 
    Linux и Unix - лучшая ОС в мире.