여러 번 발견된 패턴에 대해 다른 대체 텍스트를 사용하는 방법 [중복]

여러 번 발견된 패턴에 대해 다른 대체 텍스트를 사용하는 방법 [중복]

예제 로그 파일:

apple AAA rose
banana AAA tulip
orange AAA marigold

텍스트 파일 바꾸기:

111
222
333

예상 출력:

apple 111 rose
banana 222 tulip
orange 333 marigold

답변1

고양이의 가죽을 벗기는 방법에는 여러 가지가 있습니다. 두 파일 간의 연결이 1번 라인에 있다고 가정해 보겠습니다. 예를 들어 다음과 같이 paste행을 함께 배치한 다음 AAA정규식을 사용하여 "역참조"가 포함된 필드로 후행 단어를 이동합니다.

paste sample_log replacement-text | sed -r 's/AAA ([^[:space:]]*[[:space:]]*)(.*$)/\2 \1/'
apple 111 rose  
banana 222 tulip    
orange 333 marigold 

또는 awk대체 항목을 배열로 읽어온 다음 두 번째 필드를 해당 배열 요소로 바꾸는 방법은 다음과 같습니다.

awk 'NR==FNR {T[NR] = $0; next } {$2 = T[FNR]} 1' replacement-text sample_log 
apple 111 rose
banana 222 tulip
orange 333 marigold

답변2

#!/bin/bash 
paste logfile.txt replacement.txt | while IFS= read -r line; do

echo $line | sed "s/`echo $line | awk '{print $2}'`/`echo $line | awk '{print $4}'`/g" | awk '{print $1 " " $2 " " $3 " "}'

done

관련 정보