2011-10-21 6 views

답변

22

시도 :

awk 'FNR==NR{a[NR]=$3;next}{$2=a[FNR]}1' f2 f1 

출력 : 위의 코드의

111 000 444 
222 111 555 
333 555 666 

설명 :

  • FNR==NR 모든 한 번에 하나의 전체 파일로 작업해야합니다. 이 경우 파일은 f2입니다. NRFNR은 모두 차이가있는 행 번호를 포함하고 FNR은 새 파일을 읽을 때 1로 재설정되고 NR은 계속 증가합니다. 우리 f2 파일로 작업하는 동안
  • 우리는 값으로 key 및 세 번째 열 ($3)으로 행 번호 (NR)를 사용 a라는 배열을 생성한다. next을 사용하면 나머지 액션 블록을 건너 뛸 수 있습니다.
  • f2 파일이 끝나면 f1 파일에서 작업하기 시작합니다. FNR은 1에서 증가하고 NR은 증가하지 않으므로 NR==FNR 조건은 거짓이되지 않습니다. 따라서 두 번째 조치 블록 {$2=a[FNR]} 만 작업하게됩니다.
  • 이 블록은 행 번호를 조회하여 두 번째 열 값을 배열 값에 다시 할당합니다.
  • 끝에 줄이 인쇄됩니다. true를 반환하고 awk true 문은 결과를 출력합니다.
  • f2 f1은 정의 된 파일의 순서입니다. 파일 f2에서 배열을 만들고 싶으므로 먼저 배열을 작성합니다.
+1

이 명령을 설명해주십시오. 감사합니다 – saloua

+0

@ saloua 몇 가지 설명을 추가했습니다. 희망이 도움이됩니다! –

+1

유스 케이스가 약간 다릅니다 (약간만 변경되었습니다). 차이점은 필자는 공백으로 구분 된 대신 f1과 f2에 대해 쉼표로 분리 된 파일을 가지고 있다는 것입니다. '-F,'옵션을 사용하여 같은 명령을 시도했지만, 출력 파일에 쉼표가 없다. 이 문제를 해결할 방법이 있습니까? – Ganesh

관련 문제