2017-11-13 3 views
0

많은 부동 소수점을 포함하는 두 개의 파일이 있습니다. 파일 2의 부동 숫자로 파일 1의 부동 숫자 중 하나를 바꾸고 싶습니다. 줄과 문자를 사용하여 숫자가 아닌 값을 찾습니다.파일의 일부를 다른 파일의 일부로 대체하십시오.

많은 주제가 있지만 두 번째 파일에서 값을 복사하는 데 사용할 수있는 항목이 없습니다.

을 File1 :

14 4 
2.64895E-01 4.75834E+02 2.85629E+05 -9.65829E+01 
2.76893E-01 8.53749E+02 4.56385E+05 -7.65658E+01 
6.25576E-01 5.27841E+02 5.72960E+05 -7.46175E+01 
8.56285E-01 4.67285E+02 5.75962E+05 -5.17586E+01 

있는 File2 :

가 여기 내 두 파일의 예이 특정 예에서

Some text on the first line 
1 
Some text on the third line 
0 
AND01 0.53758275 0.65728944 
AND02 0.64889566 0.53386002 
AND03 0.65729386 0.64628194 
AND04 0.26586960 0.46582925 
AND05 0.46480534 0.57415869 

, 내가 처음을 대체하고 싶습니다 li에 기록 된 두 번째 부동 소수점에 의한 File1의 두 번째 줄 번호 (2.64895E-01) File2 중 5 번째 (0.65728944).

참고 : 숫자의 값은 내가 고려하는 파일에 따라 달라 지므로 파일 내의 위치에 따라 숫자를 식별해야합니다.

저는 bash 스크립트를 사용하는 데있어 매우 익숙하며 지금까지 "sed"명령 만 사용하여 파일을 수정합니다.

아무 도움도 환영합니다 :) 입력 해 주셔서 감사합니다.

+0

난 당신이 떠들썩한 파티를 졸업하고 읽고 해당 필드를 작성하는 진정한 언어를 사용해야 할 수도 있습니다 생각 – Pandelis

+0

당신이 교체 된 번호의 위치를 ​​식별 할 방법 및 바꿔 놓음? – karakfa

답변

0

그것은 bash에서 할 어렵지 않습니다,하지만 엄격한 요구 사항이 아니라면보다 쉽고 간결 솔루션 awk 같은 실제 텍스트 처리 도구를 사용하여 가능하다 :

awk 'NR==5 {val=$2} NR>FNR {FNR==2 && $1=val; print}' file2 file1 

설명 : file2 읽기 먼저 변수 5 번째 레코드의 두 번째 필드를 변수 val (첫 번째 부분 : NR==5 {val=$2})에 저장합니다. 그런 다음 file1을 읽고 모든 줄을 인쇄하지만 두 번째 레코드의 첫 번째 필드를 바꾸십시오 (FNR은 현재 파일 레코드 번호이고 NRval에 저장된 값으로 모든 파일의 총 레코드 수입니다).

일반적으로 awk 프로그램은 pattern { actions } 개의 시퀀스로 구성됩니다. pattern은 일련의 actions이 실행되는 조건입니다. .. $NF은 필드 값이있는 변수이며 각 줄 (레코드)은 필드 구분 기호 (FS 변수 또는 -F'..' 옵션)의 필드로 분할됩니다. 기본값은 공백입니다.

결과 (출력) :

14 4 
0.53758275 4.75834E+02 2.85629E+05 -9.65829E+01 
2.76893E-01 8.53749E+02 4.56385E+05 -7.65658E+01 
6.25576E-01 5.27841E+02 5.72960E+05 -7.46175E+01 
8.56285E-01 4.67285E+02 5.75962E+05 -5.17586E+01 
+1

랜덤 (randomir) 감사합니다. 완벽하게 작동합니다. 매우 유용한 텍스트 처리 도구는 그것을 기억할 것입니다. 도와 주셔서 다시 한 번 감사드립니다! – ms518

관련 문제