2017-10-02 11 views
1

파일 B에서 줄 번호에 따라 . 파일 B에서 각 행은 3 개의 필드로 구성됩니다 (탭으로 다시 분리됨). 첫 번째 필드는 정수이고 두 번째 및 세 번째 필드는 일부 문자열입니다. 이제 파일 A의 행 번호가 파일 B (첫 번째 필드)에 표시되면 파일 A의 행을 변경하려고합니다. 변경, 나는 예를 들어,파일의 라인의 일부를 대체하는 방법 A I는 두 개의 파일 파일 A를 가지고 파일 A의</p> <p>라인은 탭 또는 하나의 필드로 구분 된 두 개의 필드 중 하나를 구성 B. 파일

이의 내가 3 선

를 포함하는 파일 A 있다고 가정 해 봅시다 I 탭으로 파일 B에서 그 라인에 두 번째와 세 번째 필드를 병합하고 파일에서 해당 라인을 데려 가고 싶다는 의미
File A: 
poo foo 
koo goo 
too roo 

그리고 두 줄의 파일이 있습니다.

File final: 
poo foo 
change-second-line with-this 
change-third-line with-that 

이 할 수있는 방법이 있나요 : 끝에

File B: 
2 change-second-line with-this 
3 change-third-line with-that 

, 나는 다음과 같은 내용으로 파일을 원하는? 일반적으로 질문을하는 동안 내 노력을 보여주는 코드 스 니펫을 넣었지만 이번에는 그렇게하기 위해 글쓰기를 시작할 수 없습니다.

답변

0
awk 'FNR==NR{arr[$1]=substr($0,index($0,$2));next} 
    FNR in arr{print arr[FNR];next}1 
    ' fileB fileA 

또는

awk 'FNR==NR{arr[$1]=substr($0,length($1)+2);next} 
    FNR in arr{print arr[FNR];next}1 
    ' fileB fileA 

테스트 결과 :

$ cat fileA 
poo foo 
koo goo 
too roo 

$ cat fileB 
2 change-second-line with-this 
3 change-third-line with-that 

$ awk 'FNR==NR{arr[$1]=substr($0,index($0,$2));next}FNR in arr{print arr[FNR];next}1' fileB fileA 
poo foo 
change-second-line with-this 
change-third-line with-that 

# OR will be faster too 
$ awk 'FNR==NR{arr[$1]=substr($0,length($1)+2);next}FNR in arr{print arr[FNR];next}1' fileB fileA 
poo foo 
change-second-line with-this 
change-third-line with-that