파일에서 값을 추출하고 해당 값을 다른 파일의 특정 줄에 넣습니다.

파일에서 값을 추출하고 해당 값을 다른 파일의 특정 줄에 넣습니다.

2번 라인에 있는 파일 1에서 0.98728E-02 값을 가져와서 8번 라인에 있는 파일 2의 값 1,000을 그 자리에 넣으려고 합니다. 파일 2를 파일 1로 대체하는 방법은 무엇입니까?

내 파일 1:

Genetic variance(s) for effect  2       
0.98728E-02
Genetic variance(s) for effect  3       
0.56818E-02

"0.98728E-02" 값을 가져와서 파일 2의 "1.0000" 위치에 넣어야 합니다.

내 파일 2:

DATAFILE 
renf90.dat 
NUMBER_OF_TRAITS 
1 
NUMBER_OF_EFFECTS 
9 
RANDOM_RESIDUAL VALUES 
1.0000
RANDOM_GROUP 
2

"sed" 언어로 시작했는데 뭘 더 해야할지 모르겠네요...

sed '23s/1.0000/  .....

갖고 싶은 최종 파일.

DATAFILE 
renf90.dat 
NUMBER_OF_TRAITS 
1 
NUMBER_OF_EFFECTS 
9 
RANDOM_RESIDUAL VALUES 
0.98728E-02
RANDOM_GROUP 
2

추신: 줄 앞이나 뒤에는 상수 키워드가 없습니다. PS: 출력 파일(파일 1)에 따라 2~3개의 값을 추출해야 합니다.

답변1

으로 가능하다고 확신 sed하지만 다음을 사용하면 쉽게 할 수 있습니다 awk.

awk 'NR==2 { value=$1 }
     FILENAME=="file2" { if (FNR==8) print value; else print }
' file1 file2 > output_file

답변2

의 8행을 2 행 file2의 내용으로 바꿉니다 .file1sed

file2위치에서 변경됩니다.

sed -i'' '8s/.*/'"$(sed -n '2p' file1)"'/' file2

또는 위와 동일하지만 변경사항을 다음에 쓰세요.file2.new

sed '8s/.*/'"$(sed -n '2p' file1)"'/' file2 > file2.new

답변3

i=`sed -n '2p' file1`

sed  "8s/1.0000/$i/g" file2

산출

DATAFILE 
renf90.dat 
NUMBER_OF_TRAITS 
1 
NUMBER_OF_EFFECTS 
9 
RANDOM_RESIDUAL VALUES 
0.98728E-02
RANDOM_GROUP 
2

참고: 출력을 원하면 file2에 있어야 합니다.

sed -i   "8s/1.0000/$i/g" file2

관련 정보