IT story

":"를 awk 필드 구분자로 사용하는 방법은 무엇입니까?

hot-time 2020. 4. 22. 08:13
반응형

":"를 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

-Fawk그 자체에 대한 논쟁이다 :

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

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

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

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의 대답에는 좋은 구문이 포함되어 있습니다 ...


이것을 많이 쓸 필요가 없습니다. awk 명령에 -F 옵션을 사용하여 원하는 필드 구분 기호를 입력하고 인쇄하려는 열 번호를 언급 된 필드 구분 기호에 따라 구분하십시오.

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

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

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

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

이것은 정말 재미있는 방정식입니다.

참고 URL : https://stackoverflow.com/questions/2609552/how-to-use-as-awk-field-separator

반응형