awk 스 크 립 트 정렬

4740 단어 awk
전환 하 다http://www.cnblogs.com/chengmo/archive/2010/10/09/1846696.html
 
awk 배열 때문에 관련 배열 입 니 다.for... in 순환 출력 시 기본 출력 은 무질서 한 배열 입 니 다.
 
[chengmo@localhost ~]$ awk 'BEGIN{info = "this is a test";split(info,tA," ");for(k in tA){print k,tA[k];}}'4 test1 this2 is3 a
 
순서대로 출력 해 야 한다 면 키 포 지 셔 닝 방식 으로 출력 합 니 다.
[chengmo@localhost ~]$ awk 'BEGIN{info = "this is a test";slen=split(info,tA," ");for(i=1;i<=slen;i++){print i,tA[i];}}'       1 this2 is3 a4 test
 
1. 내 장 된 함수 (asort, asorti 사용) awk 3.1 이상 버 전 지원
asort 사용 설명 srcarlen = asort [srcarr, dscarr] 의 기본 반환 값 은: 원래 배열 의 길이 이 고, 매개 변수 dscarr 에 들 어 오 면 정렬 후 배열 의 값 을 dscarr 에 부여 합 니 다.
 
[chengmo@localhost ~]$ awk 'BEGIN{a[100]=100;a[2]=224;a[3]=34;slen=asort(a,tA);for(i=1;i<=slen;i++){print i,tA[i];}}'1 342 1003 224
asort 는 값 만 정렬 했 기 때문에 원래 키 값 을 잃 어 버 렸 습 니 다.
 
2, asorti 사용 설명
[chengmo@localhost ~]$ awk 'BEGIN{a["d"]=100;a["a"]=224;a["c"]=34;slen=asorti(a,tA);for(i=1;i<=slen;i++){print i,tA[i],a[tA[i]];}}'1 a 2242 c 343 d 100
asorti 는 키 값 을 정렬 (문자열 형식) 하고 새로운 배열 을 생 성하 여: tA 에 넣 습 니 다.
 
 
2. 파 이 프 를 통 해 sort 정렬 으로 보 내기
[chengmo@localhost ~]$awk 'BEGIN{a[100]=100;a[2]=224;a[3]=34;for(i in a){print i,a[i] | "sort -r -n -k2";}}'2 224100 1003 34
 
파 이 프 를 통 해 외부 프로그램 'sort' 로 정렬 합 니 다. - r 는 큰 것 부터 작은 것 까지, - n 은 숫자 에 따라 정렬 합 니 다. - k2 는 두 번 째 열 로 정렬 합 니 다. 데 이 터 를 제3자 에 게 던 지 는 sort 명령 을 통 해 모든 문제 가 간단 해 집 니 다. key 값 으로 정렬 하면 - k2 는 - k1 로 바 뀌 면 됩 니 다.
[chengmo@localhost ~]$ awk 'BEGIN{a[100]=100;a[2]=224;a[3]=34;for(i in a){print i,a[i] | "sort -r -n -k1";}}'100 1003 342 224
 
 
3. 사용자 정의 정렬 함수
awk 사용자 정의 함수 구조: function funname(p1,p2,p3)
{
    staction;
    return value;
}
이상 은 awk 사용자 정의 함수 표시 방식 입 니 다. 기본 입력 매개 변 수 는 참조 방식 으로 들 어 옵 니 다. return 값 은 문자 형 이나 수치 형 만 있 을 수 있 습 니 다. 배열 형식 으로 돌아 갈 수 없습니다. 배열 형식 으로 돌아 갈 경우, 인삼 방식 으로 들 어 와 야 합 니 다. 다시 얻 을 수 있 습 니 다.
awk 반환 배열 형식
awk 'function test(ary){
for(i=0;i<10;i++){
ary[i]=i;
}
return i;
}
BEGIN{
n=test(array);
for(i=0;i<n;i++){
print array[i];
}
}
'

정렬 함수 \ # arr 1 차원 배열 에 들 어 갑 니 다 \ # key 정렬 유형 1 은 값 에 따라 정렬 합 니 다.= a 구분자 100, 그리고 아래 표 시 된 대로 내용 을 재 귀적 으로 표시 합 니 다. 이 정렬 은 거품 방식 으로 진행 합 니 다. function sortArr(arr,key,datatype,tarr,splitseq){    if(key ~ /[^1-2]/)     {return tarr;}    for(k in arr)    {      tarr[++alen]=(k""splitseq""arr[k]);    }    for(m=1;m<=alen;m++)    {        for(n=1;n<=alen-m-1;n++)        {            split(tarr[m],tm,splitseq);            split(tarr[n+1],tn,splitseq);                tnum=tarr[m];            if(datatype==1)            {                if(tm[key]+0 
전체 코드 는 다음 과 같 습 니 다:
[chengmo@centos5 ~]$ awk 'BEGIN{a["a"]=100;a["b"]=110;a["c"]=10;splitseq="%%";alen=sortArr(a,2,1,tarr,splitseq);for(m=1;m<=alen;m++){    split(tarr[m],ta,splitseq);    print m,ta[1],ta[2];}}function sortArr(arr,key,datatype,tarr,splitseq){    if(key ~ /[^1-2]/)     {return tarr;}    for(k in arr)    {      tarr[++alen]=(k""splitseq""arr[k]);    }    for(m=1;m<=alen;m++)    {        for(n=1;n<=alen-m-1;n++)        {            split(tarr[m],tm,splitseq);            split(tarr[n+1],tn,splitseq);                tnum=tarr[m];            if(datatype==1)            {                if(tm[key]+0 
 
이상 은 awk 배열 정렬 방법 입 니 다. 소량의 데이터 정렬 은 성능 에 있어 서 사용자 정의 함수 성능 이 높 습 니 다. 프로 세 스 를 따로 시작 할 필요 가 없습니다. 대량의 데이터 에 대해 서 는 두 번 째 방법 을 정렬 하 는 것 이 좋 습 니 다.

좋은 웹페이지 즐겨찾기