일련의 페어링된 파일을 처리하는 방법

일련의 페어링된 파일을 처리하는 방법

폴더에는 collection다음 파일이 있습니다.

fberry.txt   lberry.txt
fgag.txt     lgag.txt
fred.txt     lred.txt
ftea.txt     ltea.txt
fluck.txt    lluck.txt

이러한 파일은 두 가지 유형으로 나눌 수 있습니다. 하나는 로 시작 f하고 다른 하나는 로 시작합니다 l. 그리고 모든 두 파일은 동일한 이름을 공유합니다(첫 번째 문자 제외). 예: In fberry.txtlberry.txtberry.txt동일합니다. 이 두 쌍의 파일에서 각 파일의 첫 번째 열은 동일하며 lberry.txt동일한 열을 기반으로 두 파일(처음 두 열과 세 번째 열)을 병합하고 싶습니다 .fberry.txt

다음 코드를 사용합니다.

cd ~/collection
awk 'NR==FNR {h[$1]=$3; next} {print $1,$2,h[$1]}' fberry.txt lberry.txt > tberry.txt

내가 원하는 결과는 나오지만, 이 모든 파일 쌍을 함께 처리하는 방법을 모르겠습니다. 그렇지 않으면 이와 같이 5개의 코드를 작성해야 하며, 파일이 100개 이상이면 재앙이 될 것입니다.

tberry.txt내 예상 결과는 5개의 새 파일( , 및 ) tgag.txt을 얻는 것입니다 . 감사해요.tred.txtttea.txttluck.txt

답변1

for file in f*.txt
do name=${file:1}
awk 'NR==FNR {h[$1]=$3; next} {print $1,$2,h[$1]}' "$file" "l$name" > "t$name"
done

@don_crissti에게 감사드립니다. 여기서 ${file:1}첫 번째 문자 이후의 문자를 추출할 수 있습니다. 이를 통해 쌍을 이루는 파일 이름의 공통 부분을 쉽게 얻을 수 있습니다. 구문 ${file:1}은 입니다 ${string: index: length}.

관련 정보