2013-09-27 2 views
1

은 내가 작품을 만들려고 노력하고 스크립트의 awk 명령을, 나는 'A'의 의미를 이해하지 않습니다awk 명령에서 "a"의 의미는 무엇입니까?

AWK 'FNR을 == NR {A [$ 1] = $ 0; (A에서 $ 2)} 다음 'Filelist.txt의 FILEIN. *> FILEOUT. *

내가 명령 줄을 사용하여 아주 새로운, 그래서 난 그냥, 덕분에 일을 알아 내려고 노력하고있어. "

awk 'FNR==NR {arr[$1]=$0;next} ($2 in arr)' FILELIST.TXT FILEIN.* > FILEOUT.* 
+3

그것은 배열이다. 자세한 내용은 http://backreference.org/2010/02/10/idiomatic-awk/을 참조하십시오. – fedorqui

답변

5

a은 연관 배열입니다.

a[$1] = $0; 

배열의 인덱스로서 행의 첫 번째 단어 $1 걸리고, 값으로서 전체 라인 $0를 저장한다. 첫 번째 파일에 대해이 작업을 수행합니다 (파일 레코드 번호는 전체 레코드 번호와 같습니다). next 명령은 첫 번째 파일을 처리하는 동안 나머지 스크립트를 처리하지 않음을 의미합니다.

($2 in a) 

$2 단어가 발견되면 행을 인쇄 : 데이터 파일의 나머지 부분

, 그것은 평가합니다. 따라서 $0a에 저장하는 것이 전체 파일의 복사본을 저장하므로 (파일의 각 행에 단 하나의 단어가있는 경우 두 번) 저장하기 때문에 상대적으로 비용이 많이 듭니다. a[$1]++ 또는 심지어 a[$1] = 1을 수행하는 것이 더 일반적이며 충분합니다.

주어 FILEIN.1 함유하여 Filelist.txt

ABC The rest 
DEF And more 
주어

는 :

Word ABC and so on 
Grow FED won't be shown 
This DEF will be shown 
The XYZ will be missing 

출력 될 것이다

Word ABC and so on 
This DEF will be shown 
3

은 매우 잘 또한 arr 할 수있는 명령하지만, awk array 아니다 첫 x 째 입력 파일의 첫 x 째 컬럼에서 가져온 인덱스를 사용하여 "a"를 작성하십시오. 모든 요소 값이 현재 레코드로 설정됩니다.

다음 문장은 awk가 즉시 현재 레코드 처리를 중단하고 다음 레코드로 이동하도록합니다.

2

A는 코드

FNR==NR{ a[$1]=$0;next } 

에서, 배열에 불과하다라는 배열을 만듭니다 여기 a

관련 문제