소스 파일 행의 문자열이 대상 파일의 일치하는 문자열로 대체됩니다.

소스 파일 행의 문자열이 대상 파일의 일치하는 문자열로 대체됩니다.

대상 파일 콘텐츠

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
  • 제공한 샘플 데이터로 작동하지만 일치하는 패턴이 더 많으면 실패할 수 있습니다.
  • 대용량 데이터/파일의 경우 속도가 매우 느립니다.

관련 정보