여러 파일을 처리하고 확장자 없이 파일 이름과 특정 키 값을 인쇄합니다.

여러 파일을 처리하고 확장자 없이 파일 이름과 특정 키 값을 인쇄합니다.

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파일 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}' +

답변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}'

관련 정보