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