2017-10-25 16 views
3

GNU awk 4.2 was released 그리고 많은 흥미로운 기능이 포함되어 있습니다. 그 중 하나는 다음과 같습니다GNU Awk 4.2에서 FIELDWIDTHS를 사용하여 문자를 어떻게 건너 뛸 수 있습니까?

    구문을 분석
  1. FIELDWIDTHS이 필드를 시작하기 전에 건너 뛸 얼마나 많은 문자를 지정 할 수 있도록 향상되었습니다. 또한 "나머지 레코드"를 의미하는 마지막 문자로 '*'를 지정할 수 있습니다. FIELDWIDTHS를 사용한 필드 분할은 이제 NF를 올바르게 설정합니다. 매뉴얼에있는 FIELDWIDTHS에 대한 문서는 상당히 재구성되고 개선되었습니다.

내가 * 거시기를 테스트 $NF에 마지막 블록을 잡으려고 좋은 작품 :

# "*" catches in $NF from the 2+2+1=5th character and until the end 
$ awk 'BEGIN {FIELDWIDTHS="2 2 *"} {print $NF}' <<< "1234567890" 
567890 

을하지만, 나는 또한 설명하는 기능의 첫 번째 부분을 사용하는 방법을 볼 수 없습니다 GNU Awk's Users Guide → A.6 History of gawk Features → Version 4.2 of gawk introduced the following changes에서 :

FIELDWIDTHS 필드에 값을 할당하기 전에 문자를 생략 할 수 있도록 향상되었다 (참조 10).

연결된 섹션에서도 예제를 찾을 수 없습니다. 따라서이 기능이 정확히 무엇이고 어떻게 작동합니까?

답변

5

는 GNU awk는 문서는 FIELDWIDTHS ID가 정의 된 부분이 있습니다.
해당 섹션/단락에는 새로운 기능 "에 값을 할당하기 전에 문자를 건너 뛰고"을 나타내는 몇 가지 표기법도 있습니다. 7.5.1 Built-in Variables That Control awk 여기서

가 (강조)된다 :

FIELDWIDTHS #

고정 기둥 경계 입력을 분할하는 방법을 말한다 gawk 열 공백으로 구분 된 목록. 버전 4.2부터 각각 필드 너비는 필드가 시작되기 전에을 건너 뛰는 문자 수를 지정하는 콜론으로 구분 된 값인 앞에 선택적으로 이 될 수 있습니다. FIELDWIDTHS에 값을 할당하면 및 FPAT을 사용하여 필드를 분할하는 대신 재정의합니다.

하는의 우리가 1 필드 전에 3 자와 제 2 필드 전에 한 문자를 생략하고 싶은 말은하자가 실제로 어떻게되는지


.

awk 'BEGIN {FIELDWIDTHS="3:2 1:2 *"} {print $1, $2}' <<< "1234567890" 

출력 :

45 78 

그래서 3:2 스킵 123451:2 스킵 6 설정 78 세트.