변수 텍스트를 사용하여 2개의 키로 파일의 줄 정렬

변수 텍스트를 사용하여 2개의 키로 파일의 줄 정렬

저는 DBA이고 다음 형식의 DML을 제공하는 재구성 빌드 프로세스의 출력을 가지고 있습니다.

REORG TABLE SCHEMA.A 기타 옵션
REORG TABLE SCHEMA.B 기타 옵션
REORG TABLE SCHEMA.C 기타 옵션
REORG TABLE SCHEMA.D 기타 옵션
REORG는 테이블 SCHEMA.A에 대해 모두 인덱스를 생성합니다. 기타 옵션
REORG는 테이블 SCHEMA.B에 대해 모두 인덱스를 생성합니다. 기타 옵션
REORG는 테이블 SCHEMA.C에 대해 모두 인덱스를 생성합니다. 기타 옵션
REORG는 테이블 SCHEMA.D에 대해 모두 인덱스를 생성합니다. 기타 옵션
TABLE SCHEMA.A의 RUNSTATS 기타 옵션
RUNSTATS ON TABLE SCHEMA.B 기타 옵션
RUNSTATS ON TABLE SCHEMA.C 기타 옵션
RUNSTATS ON TABLE SCHEMA.D 기타 옵션

여기서는 다루지 않기 때문에 이 파일을 다음 순서로 정렬해야 합니다(각 테이블에는 4개 이하의 테이블이 있거나 3개 이하의 항목이 있을 수 있음).

테이블 스키마 재구성.A
테이블 SCHEMA.A의 재구성된 모든 인덱스
SCHEMA.A 테이블의 RUNSTATS
재구성 테이블 스키마.B
테이블 SCHEMA.B의 재구성된 모든 인덱스
테이블 SCHEMA.B의 RUNSTATS
...등

즉. 파일의 각 테이블에 대해 REORG TABLES, REORG INDEX, RUNSTAT를 실행합니다.

나는 다음(및 변형)을 시도했습니다.

sort-t. -k2 테스트.필
sort-t. -k2.1,2.8 -k1.1,1.7 test.fil

그러나 문제는 보조 정렬(REORG TABLE, REORG INDEX 및 RUNSTAT)이 제대로 작동하는 것 같습니다.

위의 첫 번째 sort 명령은 테이블 이름을 기준으로 내림차순으로 개체를 가져온 다음 k2 길이로 정렬합니다.

두 번째 정렬 명령은 알파벳에서 TABLE이 INDEX 뒤에 오는 점(T가 I 뒤에 온다)을 고려하지 않지만 Table 뒤에 INDEX가 있어야 합니다.

도움을 줄 수 있는 전문가라면 누구든지 크게 감사하겠습니다. 함께 사용할 수 있는 다른 awk 및 linux 명령이 있을까요?

또한 정렬 명령 옵션도 살펴보았는데, 제가 놓친 부분이 있을 수도 있습니다.

답변1

awk원하는 방식으로 쉽게 정렬할 수 있도록 데이터를 수정하는 스크립트를 만들어 보겠습니다 .

BEGIN { OFS = "\t" } # set output delimiter to a tab

/REORG TABLE/ { $0 = 1 OFS $0 } # prefix line with 1 for this op.
/REORG INDEX/ { $0 = 2 OFS $0 } # with 2
/RUNSTATS/    { $0 = 3 OFS $0 } # with 3

# prefix line with schema name (unconditionally)
{ match($0,"SCHEMA\.[^ ]*"); $0 = substr($0,RSTART,RLENGTH) OFS $0 }

# output modified line
{ print }

awk스크립트는 각 줄 앞에 탭으로 구분된 두 개의 값을 추가합니다.

  1. 스키마 이름(예: SCHEMA.A.
  2. 이 패턴에서 이 작업이 발생하는 단계는 정수 1, 2 또는 3입니다.

데이터에 대해 실행하세요.

$ awk -f script.awk file
SCHEMA.A        1       REORG TABLE SCHEMA.A some other options
SCHEMA.B        1       REORG TABLE SCHEMA.B some other options
SCHEMA.C        1       REORG TABLE SCHEMA.C some other options
SCHEMA.D        1       REORG TABLE SCHEMA.D some other options
SCHEMA.A        2       REORG INDEXES ALL FOR TABLE SCHEMA.A some other options
SCHEMA.B        2       REORG INDEXES ALL FOR TABLE SCHEMA.B some other options
SCHEMA.C        2       REORG INDEXES ALL FOR TABLE SCHEMA.C some other options
SCHEMA.D        2       REORG INDEXES ALL FOR TABLE SCHEMA.D some other options
SCHEMA.A        3       RUNSTATS ON TABLE SCHEMA.A some other options
SCHEMA.B        3       RUNSTATS ON TABLE SCHEMA.B some other options
SCHEMA.C        3       RUNSTATS ON TABLE SCHEMA.C some other options
SCHEMA.D        3       RUNSTATS ON TABLE SCHEMA.D some other options

이것의 목적은 정렬 키를 더 쉽게 찾을 수 있도록 하는 것입니다 sort.

그런 다음 정렬하고 새 열을 제거할 수 있습니다.

$ awk -f script.awk file | sort | cut -f 3-
REORG TABLE SCHEMA.A some other options
REORG INDEXES ALL FOR TABLE SCHEMA.A some other options
RUNSTATS ON TABLE SCHEMA.A some other options
REORG TABLE SCHEMA.B some other options
REORG INDEXES ALL FOR TABLE SCHEMA.B some other options
RUNSTATS ON TABLE SCHEMA.B some other options
REORG TABLE SCHEMA.C some other options
REORG INDEXES ALL FOR TABLE SCHEMA.C some other options
RUNSTATS ON TABLE SCHEMA.C some other options
REORG TABLE SCHEMA.D some other options
REORG INDEXES ALL FOR TABLE SCHEMA.D some other options
RUNSTATS ON TABLE SCHEMA.D some other options

관련 정보