예제 로그 파일:
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