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

У меня есть файл 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 

  • сравните файл B с A и извлеките данные из A с помощью awk, sed или grep
  • Разделить файл на два
  • Форматировать образцы sar в реальном времени с помощью пасты и awk
  • Sed / awk / perl: порядок реверсирования значений, разделенных запятыми, сохранение другого текста
  • Извлечь X количество минут из текущего времени из файла журнала
  • Как удалить все числа, окруженные <>
  • Выделение ключевых слов с помощью стандартных утилит командной строки?
  • Извлечь абзац, разделенный на *** с помощью AWK
  • 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}' 
    Interesting Posts

    Dropbox, notify-send и OSD вмешиваются в Ctrl-ярлыки

    awk хотят суммировать по часам и переменные

    Проблема с запуском Matlab 2010 в Ubuntu, связанная с libXp.so.6

    Ошибка rsync: значение времени файла, усеченного на приемнике

    Наличие файла id_rsa.pub в моем защищенном репозитории dotfiles

    Как скрыть пароли в команде 'watch'?

    В bash, как вызвать переменную и обернуть кавычки вокруг ее значения как часть команды, не заставляя имя переменной стать строковым литералом?

    Как разместить большой файл на двух дисках без разделения?

    Соглашения об именах файлов и каталогов при хранении медиа коллекции в Linux

    Проверить связь с конечной косой чертой?

    Как изменить часовой пояс в UTC без перезагрузки AIX

    Чтение из файла с разделителями символов и назначение в переменные | для электронной почты

    FreeBSD и i915KMS приводят к черному экрану

    как отслеживать расширения gnome, загружать и устанавливать прогресс?

    как настроить ldap и trac

    Linux и Unix - лучшая ОС в мире.