한 파일에서 값을 추출하여 다른 값을 대체하는 다른 파일에 삽입합니다.

한 파일에서 값을 추출하여 다른 값을 대체하는 다른 파일에 삽입합니다.

두 개의 파일이 있는데 해당 줄 번호가 동일하지 않습니다. 하지만 file1명령을 사용하여 인용된 줄을 바꾸고 싶습니다 .file2sed

존재하다 file1:

tid.infno := 72
tid.setnr := 120 (This number 120 is wrong and It will be 110)
tid.typeidc := 2
tid.typeidm := 1
writedb
clear

존재하다 file2:

tid.setnr := 110 (This is correct and I want to place this number in file no. 1)

답변1

일방 awk통행:

awk 'FNR==NR&&$1=="tid.setnr"{x=$3} NR!=FNR{if($1=="tid.setnr"){$3=x}print}' file2 file1
  • 1부: FNR==NR&&$1=="tid.setnr"{x=$3}:실행 file2하고 값( )이 있는 변수가 발견되면 검색합니다 tid.setnr.x110
  • 파트 2: NR!=FNR{if($1=="tid.setnr"){$3=x}print}: trought file1, search 를 실행 tid.setnr하고 찾은 경우 세 번째 필드( $3)를 다른 파일에서 찾은 숫자로 바꿉니다.

답변2

먼저 file-2에서 숫자를 추출하여 변수로 저장합니다.

correctNo=`grep -oP "setnr\s\:\=\s\K\d+" file2.txt`

그런 다음 file-1에서 이 번호를 바꿉니다.

sed -re "s/(setnr\s\:\=\s)([0-9]+)/\1$correctNo/g" file1.txt

답변3

이건 어때:

$ for line in `cat file2.txt`; do
pattern= `sed "s/\s*:=.*//"`
sed "s/$pattern.*/$line/" file1.txt > file3.txt
done

이 코드는 file1.txt의 행을 사용하여 file3.txt를 생성하고 file2.txt의 패턴과 일치하는 모든 행은 file2.txt의 행으로 대체됩니다.

여기서는 많은 가정을 하고 있습니다... 위의 내용은 file1에서 "tid.setnr"을 찾고 전체 줄을 file2.txt의 줄로 바꿉니다.

관련 정보