두 개의 파일이 있는데 해당 줄 번호가 동일하지 않습니다. 하지만 file1
명령을 사용하여 인용된 줄을 바꾸고 싶습니다 .file2
sed
존재하다 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
.x
110
- 파트 2:
NR!=FNR{if($1=="tid.setnr"){$3=x}print}
: troughtfile1
, 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의 줄로 바꿉니다.