9
I는 두 파일을 가지고awk를 사용하여 한 파일의 열을 다른 파일의 열로 바꿉니 까?
f1:
111 aaa 444
222 bbb 555
333 ccc 666
f2:
111 333 000 444
222 444 111 555
333 555 555 666
I가 사용 AWK "F2"에서 세번째 컬럼, "F1"에서 두 번째 열을 대체 할 수있는 방법
?
I는 두 파일을 가지고awk를 사용하여 한 파일의 열을 다른 파일의 열로 바꿉니 까?
f1:
111 aaa 444
222 bbb 555
333 ccc 666
f2:
111 333 000 444
222 444 111 555
333 555 555 666
I가 사용 AWK "F2"에서 세번째 컬럼, "F1"에서 두 번째 열을 대체 할 수있는 방법
?
시도 :
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
입니다. NR
과 FNR
은 모두 차이가있는 행 번호를 포함하고 FNR
은 새 파일을 읽을 때 1로 재설정되고 NR
은 계속 증가합니다. 우리 f2
파일로 작업하는 동안key
및 세 번째 열 ($3
)으로 행 번호 (NR
)를 사용 a
라는 배열을 생성한다. next
을 사용하면 나머지 액션 블록을 건너 뛸 수 있습니다.f2
파일이 끝나면 f1
파일에서 작업하기 시작합니다. FNR
은 1에서 증가하고 NR
은 증가하지 않으므로 NR==FNR
조건은 거짓이되지 않습니다. 따라서 두 번째 조치 블록 {$2=a[FNR]}
만 작업하게됩니다.awk
true 문은 결과를 출력합니다.f2 f1
은 정의 된 파일의 순서입니다. 파일 f2
에서 배열을 만들고 싶으므로 먼저 배열을 작성합니다.
이 명령을 설명해주십시오. 감사합니다 – saloua
@ saloua 몇 가지 설명을 추가했습니다. 희망이 도움이됩니다! –
유스 케이스가 약간 다릅니다 (약간만 변경되었습니다). 차이점은 필자는 공백으로 구분 된 대신 f1과 f2에 대해 쉼표로 분리 된 파일을 가지고 있다는 것입니다. '-F,'옵션을 사용하여 같은 명령을 시도했지만, 출력 파일에 쉼표가 없다. 이 문제를 해결할 방법이 있습니까? – Ganesh