programing

AWK 필드 구분자로 ":"를 사용하려면 어떻게 해야 합니까?

mbctv 2023. 4. 11. 22:26
반응형

AWK 필드 구분자로 ":"를 사용하려면 어떻게 해야 합니까?

다음 명령어를 지정하면

echo "1: " | awk '/1/ -F ":" {print $1}'

AWK가 출력하는 이유:

1:

?

-F는 명령줄 인수이며 AWK 구문이 아닙니다.시험:

echo '1: ' | awk -F  ':' '/1/ {print $1}'

프로그램적으로 하고 싶은 경우는,FS변수:

echo "1: " | awk 'BEGIN { FS=":" } /1/ { print $1 }'

메인 루프가 아닌 메인루프에서 변경할 경우 주의해 주십시오.BEGIN루프는 현재 회선이 이미 분할되어 있기 때문에 다음 회선 읽기부터 유효합니다.

여러 가지 방법으로 설정할 수 있습니다.:구분 기호:

awk -F: '{print $1}'

awk -v FS=: '{print $1}'

awk '{print $1}' FS=:

awk 'BEGIN{FS=":"} {print $1}'

모두 동등하며, 다시 돌아올 것입니다.1샘플 입력 "1:2:3":

$ awk -F: '{print $1}' <<< "1:2:3"
1
$ awk -v FS=: '{print $1}' <<< "1:2:3"
1
$ awk '{print $1}' FS=: <<< "1:2:3"
1
$ awk 'BEGIN{FS=":"} {print $1}' <<< "1:2:3"
1

정규식을 필드 구분 기호로 사용할 수도 있습니다.다음은 정규식을 사용하여 숫자 "10"을 구분 기호로 설정하여 "막대"를 인쇄합니다.

echo "foo 10 bar" | awk -F'[0-9][0-9]' '{print $2}'

-F에 대한 논의입니다.awk그 자체:

$echo "1: " | awk -F":" '/1/ {print $1}'
1

또는 다음을 사용할 수 있습니다.

echo "1: " | awk  '/1/{print $1-":"}' 

이건 정말 재미있는 방정식이에요.

이렇게 많이 쓸 필요는 없어요.원하는 필드 구분 기호를 입력하기만 하면 됩니다.-FAWK 명령의 옵션과 출력할 컬럼 번호를 필드 구분 기호로 구분하여 지정합니다.

echo "1: " | awk -F: '{print $1}'
1

echo "1#2" | awk -F# '{print $1}'
1

AWK는 문서 전체에 대해단위로, 각 행에 대해 필드 단위로 이동하는 텍스트 인터프리터 역할을 합니다.그래서 1, 2달러...$n은 각 행의 필드에 대한 참조입니다(1은 첫 번째 필드, $2는 두 번째 필드 등).

명령줄 아래의 "-F" 스위치 또는 "FS=..."가 있는 두 개의 대괄호 내에서 필드 구분 기호를 정의할 수 있습니다.

이제 위르겐의 답을 생각해 보자.

echo "1: " | awk -F  ":" '/1/ {print $1}'

필드 위에는 ":"로 경계가 설정되므로 $1이라는 두 개의 필드 1과 $2는 빈 공간입니다.그 뒤에 정규 표현 "/1/"이 표시됩니다.이 정규 표현은 인터프리터가 이러한 표현(즉, 1)을 포함한 회선을 우연히 발견했을 경우에만 첫 번째 필드를 출력하도록 필터에 지시합니다.

"echo" 명령어의 출력은 "1"을 포함하는 한 줄이므로 필터는 작동합니다.

다음 예시를 다룰 때:

echo "1: " | awk '/1/ -F ":" {print $1}'

구문이 복잡하여 인터프리터는 파트 F ":"를 무시하고 빈 공간인 기본 필드 스플리터로 전환하여 첫 번째 필드로 "1:"을 출력하고 두 번째 필드는 없습니다.

위르겐의 답변은 좋은 구문을 포함하고 있다...

echo "1: " | "456:abc:515:xyz "
awk -F: NF=/1/            
      1    |  456

업데이트: 이전 답변이 얼마나 상세했는지 확인

언급URL : https://stackoverflow.com/questions/2609552/how-can-i-use-as-an-awk-field-separator

반응형