찾기 및 바꾸기 [닫기]

찾기 및 바꾸기 [닫기]

2개의 파일이 있습니다. file1.txt의 첫 번째 열(","로 구분)은 file2.txt의 첫 번째 열과 동일합니다. 이 두 파일을 비교하고 file1.txt의 두 번째 열을 file2.txt로 바꾸고 싶습니다.

파일 1.txt

ABC-aBc-AbC,abc-abc-abc
AAA-AAA-AAA,aaa-aaa-aaa

파일 2.txt

텍스트 텍스트ABC-aBc-AbC텍스트 텍스트 텍스트AAA-AAA-AAA텍스트 텍스트.

답변1

file2.txt이 파일은 의 첫 번째 열 문자열 인스턴스를 포함할 수 있는 자유 형식 텍스트 파일이고 file1.txt이를 해당하는 두 번째 열 문자열로 바꾸려고 한다고 가정합니다 .

정규식 특수 문자가 포함되어 있지 않은 경우 file1.txt이를 sed 스크립트로 변환한 다음 sed 스크립트를 두 번째 파일에 적용하는 것이 상당히 효율적인 접근 방식일 수 있습니다.

sed 's/.*/s,&,g/' file1.txt | sed -f- file2.txt
text text abc-abc-abc text text text aaa-aaa-aaa text text.

또는 (이번에는 의 문자열이 file2.txt공백으로 구분되어 있다고 가정) 의 항목을 기반으로 조회 테이블을 작성한 file1.txt다음 필드를 반복 file2.txt하고 그에 따라 바꿀 수 있습니다.

awk -F, 'NR==FNR {a[$1]=$2; next} {for (i=1;i<=NF;i++) {if ($i in a) $i = a[$i]}} 1' file1.txt FS='[ \t]+' file2.txt
text text abc-abc-abc text text text aaa-aaa-aaa text text.

또는

awk -F, 'NR==FNR {a[$1]=$2; next} {for (i=1;i<=NF;i++) {$i = $i in a? a[$i] : $i}} 1' file1.txt FS='[ \t]+' file2.txt
text text abc-abc-abc text text text aaa-aaa-aaa text text.

관련 정보