awk 구문, 이상한 변수?

awk 구문, 이상한 변수?

나는 다음 awk명령을 가지고 있습니다 :

awk -F, 'NR==FNR{_1[$1]++;next}_1[$1]' file1 file2

나는 실제로 프로그램이 무엇을 하는지 거의 알고 있지만 _1그것이 무엇을 의미하는지는 모릅니다. 목적은 두 개의 파일을 비교하는 것입니다. 하나는 필드가 1개이고 다른 하나는 필드가 4개입니다.

이것이 내가 하려는 일이다. 나는 이 파일들을 가지고 있고 파일 1의 어떤 숫자가 파일 2에 있는지 알고 나서 파일 2의 기록을 인쇄해야 합니다.

파일 1

89611862
89613696
84126597
88690669
60147342

파일 2

84126597,12345300943529348333,2805058C30730000,28
88767631,12345712012010684248,2805058C30730002,28
83218719,12345712012012622594,2805058C30730006,28
89611862,12345712012010174449,2805058C30730014,28
85933710,12345712012007778032,2805058C3073001A,26
88690669,12345712012012060159,2805058C3073001E,28
60147342,12345712012011235922,2805058C30730030,28
89613696,12345712012008043980,2805058C3073003C,28
84783612,12345712012031117926,2805058C3073004C,28
awk -F, 'NR==FNR{arr[$1]++;next}arr[$1]' file1 file2

하지만 마지막으로 발견된 레코드만 인쇄합니다.

60147342,12345712012011235922,2805058C30730030,28 

감사해요!

답변1

awk숫자만 포함하는 변수 이름은 허용되지 않습니다(변수 이름도 숫자로 시작할 수 없음). 따라서 1 _1앞에 트릭을 추가하십시오. 이 경우에는 배열이 되는 프로그램의 변수 이름이 됩니다 . .__1awk

예는 다음과 같습니다.

% awk 'BEGIN {1 = 3}'
awk: cmd. line:1: BEGIN {1 = 3}
awk: cmd. line:1:          ^ syntax error

% awk 'BEGIN {_1 = 3}'  # runs fine

그런데, 의도적으로 골프를 치는 것이 아니라면, 더 나은 유지 관리를 위해 프로그램에서 읽을 수 있는 변수 이름을 사용해야 합니다.

관련 정보