폴더에는 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.txt
및 lberry.txt
는 berry.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.txt
ttea.txt
tluck.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}
.