대상 파일 콘텐츠
shivps 256146 54645 46561431
kaspsa 212142 21244 21144664
소스 파일 내용
shivps 111111 22222 33333333
kaspsa 222222 11111 44444444
원본 파일에서 대상 파일까지 동일한 이름 줄을 다른 데이터로 바꾸는 방법
답변1
while 읽기 루프를 사용하면 파일을 제자리에서 편집하지 않고 결과만 stdout으로 출력됩니다.
source.txt의 내용
shivps 111111 22222 33333333 Iam_from_source.txt
Iam_from_source-source-source
kaspsa 222222 11111 44444444 Iam_from_source.txt
Iam_from_source-source-source
Destination.txt의 내용
shivps 256146 54645 46561431 Iam_from_destination.txt
Iam_from_destination-destination
kaspsa 212142 21244 21144664 Iam_from_destination.txt
Iam_from_destination-destination
스크립트.
#!/usr/bin/env bash
source=$1
destination=$2
while IFS= read -r lines_from_source <&3; do
IFS= read -r lines_from_destination
if [[ ${lines_from_source%% *} == ${lines_from_destination%% *} ]]; then
printf '%s\n' "${lines_from_source//$lines_from_destination}"
else
printf '%s\n' "$lines_from_destination"
fi
done 3<"$source" < "$destination"
스크립트를 실행합니다.
./script source.txt destination.txt
산출
shivps 111111 22222 33333333 Iam_from_source.txt
Iam_from_destination-destination
kaspsa 222222 11111 44444444 Iam_from_source.txt
Iam_from_destination-destination
- 제공한 샘플 데이터로 작동하지만 일치하는 패턴이 더 많으면 실패할 수 있습니다.
- 대용량 데이터/파일의 경우 속도가 매우 느립니다.