주어진 다음 명령 :
echo "1: " | awk '/1/ -F ":" {print $1}'
왜 awk가 출력합니까?
1:
주어진 다음 명령 :
echo "1: " | awk '/1/ -F ":" {print $1}'
왜 awk가 출력합니까?
1:
답변:
"-F"는 awk 구문이 아닌 명령 행 인수입니다.
echo "1: " | awk -F ":" '/1/ {print $1}'
(pattern){action}
. 경우 pattern
(주로 조건문) 인 사실 , action
실행됩니다. 를 pattern
사용할 수 없으면 true
묵시적입니다. 여기는 pattern
것입니다 /1/
어떤 상태 정규식되어 1
현재 레코드에 일치$0
프로그래밍 방식으로 수행하려면 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
BEGIN
파일을 사용하여 모든 것을 저장하면 사용하는 경향이 있지만 -F
하나의 라이너로 편리합니다.
awk 'BEGIN{print split("foo:bar",a)}' FS=":" file
andawk 'BEGIN{FS=":"; print split("foo:bar",a)}' file
AWK 텍스트 통역 작동 문서 전체 라인 방식을 진행 하고 그 라인마다 fieldwise 간다 각 라인의 필드에 따라서 $ 1, $ 2 .. $ n은 참조 ($ 1의 첫 번째 필드 인 $ 2 번째 필드 등이며 ...). 명령 줄 아래에서 "-F"스위치를 사용하거나 "FS = ..."가있는 두 개의 괄호 안에 필드 구분 기호를 정의 할 수 있습니다. 이제 "JUERGEN"의 대답을 고려하십시오.
echo "1: " | awk -F ":" '/1/ {print $1}'
필드 경계 위에서 ":"로 설정되므로 $ 1이라는 두 개의 필드 $ 1과 빈 공간 인 $ 2가 있습니다. 그런 다음 첫 번째 필드 만 출력하도록 필터에 지시하는 정규식 "/ 1 /"이 나타납니다. 통역사가 그러한 표현을 포함하는 줄에 걸려 넘어 질 때 (i 평균 1); "echo"명령의 출력은 "1"을 포함하는 한 줄이므로 필터가 작동합니다.
다음 예제를 다룰 때 :
echo "1: " | awk '/1/ -F ":" {print $1}'
구문이 지저분하고 인터프리터는 부분 F ":"를 무시하기로 선택 하고 빈 필드 인 기본 필드 스플리터로 전환하여 "1 :"을 첫 번째 필드로 출력하고 두 번째 필드는 없습니다!
JUERGEN의 대답에는 좋은 구문이 포함되어 있습니다 ...