IT

AWK 다중 분리 문자

lottoking 2020. 5. 17. 11:09
반응형

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

반응형