AWK 다중 분리 문자
다음 줄이 포함 된 파일이 있습니다.
/logs/tc0001/tomcat/tomcat7.1/conf/catalina.properties:app.env.server.name = demo.example.com
/logs/tc0001/tomcat/tomcat7.2/conf/catalina.properties:app.env.server.name = quest.example.com
/logs/tc0001/tomcat/tomcat7.5/conf/catalina.properties:app.env.server.name = www.example.com
위의 출력에서 3 개의 필드 (번호 2, 4 및 마지막 필드)를 추출하려고합니다 *.example.com
. 다음과 같은 결과가 나타납니다.
cat file | awk -F'/' '{print $3 "\t" $5}'
tc0001 tomcat7.1
tc0001 tomcat7.2
tc0001 tomcat7.5
도메인 이름을 가진 마지막 필드는 어떻게 추출 '='
합니까? multiple delimiter
필드를 추출 하는 데 어떻게 사용 합니까?
분리 문자는 정규식 일 수 있습니다.
awk -F'[/=]' '{print $3 "\t" $5 "\t" $8}' file
생산 :
tc0001 tomcat7.1 demo.example.com
tc0001 tomcat7.2 quest.example.com
tc0001 tomcat7.5 www.example.com
좋은 소식! awk
필드 구분 기호는 정규식 일 수 있습니다. 다음을 사용해야합니다 -F"<separator1>|<separator2>|..."
.
awk -F"/|=" '{print $3, $5, $NF}' file
보고:
tc0001 tomcat7.1 demo.example.com
tc0001 tomcat7.2 quest.example.com
tc0001 tomcat7.5 www.example.com
여기:
-F="/|="
입력 필드 구분 기호를/
또는로 설정합니다=
. 그런 다음 출력 필드 구분 기호를 탭으로 설정합니다.{print $3, $5, $NF}
입력 필드 구분 기호를 기준으로 3 번째, 5 번째 및 마지막 필드를 인쇄합니다.
다른 예를보십시오 :
$ cat file
hello#how_are_you
i#am_very#well_thank#you
이 파일에는 두 개의 필드 구분 기호 #
와가 _
있습니다. 구분 기호가 하나인지에 관계없이 두 번째 필드를 인쇄하려면 둘 다 구분 기호로 만드십시오!
$ awk -F"#|_" '{print $2}' file
how
am
파일 번호는 다음과 같습니다.
hello#how_are_you i#am_very#well_thank#you
^^^^^ ^^^ ^^^ ^^^ ^ ^^ ^^^^ ^^^^ ^^^^^ ^^^
1 2 3 4 1 2 3 4 5 6
공백이 일관된 경우 \t
직접 삽입하는 대신 구분 기호로 사용할 수 있으며 출력 구분 기호를 설정하면 자동으로 포함됩니다.
< file awk -v OFS='\t' -v FS='[/ ]' '{print $3, $5, $NF}'
필드 개수의 세퍼레이터 2
를 통해 5
나 문자 a
또는 #
분리 특성은, 예를 들면, 적어도 2 배 이상, 6 번 반복해야 또는 공간 :
awk -F'[2-5a# ]{2,6}' ...
() 및 매개 변수를 사용하여 변형이 존재한다고 확신합니다.
펄 원 라이너 :
perl -F'/[\/=]/' -lane 'print "$F[2]\t$F[4]\t$F[7]"' file
다음과 같은 명령 줄 옵션이 사용됩니다.
-n
입력 파일의 모든 줄을 반복하고$_
변수에 줄을 넣고 모든 줄을 자동으로 인쇄하지는 않습니다.-l
처리하기 전에 줄 바꿈을 제거하고 나중에 다시 줄 바꿈-a
자동 분할 모드 – perl은 입력 라인을@F
어레이 로 자동 분할합니다 . 공백으로 기본 분할-F
자동 분할 수정 자 (이 예에서는/
또는=
-e
펄 코드를 실행
Perl은 awk와 밀접한 관련이 있지만 자동 @F
분할 배열은 인덱스에서 시작 $F[0]
하지만 awk 필드는 $ 1로 시작합니다.
보드에 많은 완벽한 답변이 있지만 여전히 코드를 업로드하고 싶습니다.
awk -F"/" '{print $3 " " $5 " " $7}' sam | sed 's/ cat.* =//g'
참고 URL : https://stackoverflow.com/questions/12204192/awk-multiple-delimiter
'IT' 카테고리의 다른 글
프로그래밍 방식으로 속성을 어떻게 설정합니까? (0) | 2020.05.17 |
---|---|
jQuery를 사용한 키보드 단축키 (0) | 2020.05.17 |
특정 파일에 대한 Git 병합 전략을 선택하십시오 (“우리”,“광산”,“그들의”) (0) | 2020.05.17 |
왜 내가 () 또는 new ()를 만들 것입니까? (0) | 2020.05.17 |
왜 GCC는 거의 동일한 C 코드에 대해 이렇게 완전히 다른 어셈블리를 생성합니까? (0) | 2020.05.17 |