处理多个文件并打印不带扩展名的文件名和特定键的值

处理多个文件并打印不带扩展名的文件名和特定键的值

我有 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      

答案1

您不需要该all.txt文件、sedfor循环。 find并且awk可以做到这一切:

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

使用字段分隔符:(冒号后跟空格字符)是获得正确输出的关键(无前导空格,支持第二个字段中的一个或多个单词)

如果您希望输出中包含文件名,请将 awk 脚本更改为如下所示:

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

答案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}'

相关内容