AWK

2017-03-06 15 views
0

와 함께 두 개의 큰 파일을 비교 나는 두 개의 파일을 비교하는 링크를 다음에서 참조했다 : 파일 2의 1 열은 FILE1에있는 경우는, 파일 2의 2 열을 인쇄 Compare files with awkAWK

awk 'NR==FNR{a[$1];next}$1 in a{print $2}' file1 file2 

.

하지만 내 요구 사항은 조금 다릅니다. 파일 2의 첫 번째 열이 연관 배열에서 발견되면 file1의 두 번째 열을 인쇄하는 방법 (file1의 첫 번째 열로 작성)? 이와

답변

1

: 당신이 배열 a의 각 배열 요소에 값을 할당이 방법으로

awk 'NR==FNR{a[$1]=$2;next}$1 in a{print a[$1]}' file1 file2 

. 필드가 foo bar 인 행의 경우 실제로는 a[foo]=bar을 작성합니다.
나중에 명령 {print a[foo]}을주는 경우가 인쇄됩니다 바 (이 할당 값은)

이전 {a[$1];next} 이름 a 인덱스 $1 배열을 만들지 만, 값은 null입니다; a[$1]="".

awk는 $1 in a{print something}을 사용하여 배열에서 색인을 쉽게 찾을 수 있기 때문에 모든 것이 awk에서 작동합니다. 이것은 awk if then 바로 가기입니다. {if ($1 in a) {print something}}과 같습니다. 이것에 대한 좋은 점은 부분 $1 in a은 배열 값이 아닌 배열 a 색인을 참조한다는 것입니다.

+0

"[$ 1] = $ 2;"이라고 설명 할 수 있습니까? 단계? 나는 네가하는 일을 이해할 수 없다. 그러나 당신의 솔루션은 나를 위해 일했습니다. –

+0

@Spartacus 지금은 분명합니까? 배열에 할당 한 다음 배열을 인쇄하는 것만으로 가치가 있습니다. –

+0

네, 고맙습니다. –