awk를 만들고 열을 가져옵니다.

awk를 만들고 열을 가져옵니다.

다음 질문이 있습니다.

구조 정보 보기:

0   PATRAC_1  False   Normal    Normal  3     Not configure

7개의 열과 7개의 값이 있으므로 awk를 사용하여 값을 가져와야 합니다. 처음에는 공백과 같은 구분 기호를 사용하므로 를 입력하면 print $1"0"이 표시되고 를 입력하면 print $2"가 표시됩니다. PATRAC_1" 등

그러나 열 7을 가져오려고 하면 "not"과 "configure" 사이에 공백이 있기 때문에 "Not"만 표시됩니다.

그렇다면 문제를 해결하려면 어떻게 해야 합니까?

답변1

데이터가 고정 열에 있는 경우 해당 열을 분할하도록 awk에 요청할 수 있습니다.열 너비설정을 통해 FIELDWIDTHS. 예를 들어:

awk '
 BEGIN{ FIELDWIDTHS="4 10 8 10 8 6 99" }
 { printf "1=%s 2=%s 7=%s\n", $1, $2, $7 }
'

주어진

1=0    2=PATRAC_1   7=Not configure     

답변2

기본적으로 awk는 일련의 공백을 열 구분 기호로 처리합니다. 일곱 번째 열이 행 끝까지(포함된 공백 포함)까지 확장되기를 원한다고 추측할 수 없으므로 이를 알려주어야 합니다.

공백의 양은 열마다 다르기 때문에 공백을 기준으로 열 정의를 유지하십시오. 그러나 마지막 열을 사용하는 대신 $7해당 행의 텍스트에서 처음 6개 열을 뺀 내용을 사용하세요.

awk '{
    last_column = $0;
    sub(/^[[:blank:]]*([^[:blank:]]+[[:blank:]]+){6}/, "", last_column);
    print last_column;
}'

문자 클래스를 지원하지 않는 이전 버전의 awk가 있는 경우 [ \t]대신 [[:blank:]]. 이전 버전의 awk가 정규식에서 중괄호를 지원하지 않는 경우 정규식의 복사본을 6개 만듭니다.

관련 정보