awk를 사용하여 입력을 구문 분석하고 여러 열을 인쇄하시겠습니까? [폐쇄]

awk를 사용하여 입력을 구문 분석하고 여러 열을 인쇄하시겠습니까? [폐쇄]

내 입력 파일 줄 형식은 다음과 같습니다.

themostsimpleproject', branch 'debug_randomnness' : AFFECTED. Affected image discovered: [7.19, 8.37]

awk를 사용하여 영향을 받은 이미지의 프로젝트 이름과 버전을 인쇄하고 싶습니다. 예:

themostsimpleproject 7.19, 8.37

awk에서 어떻게 할 수 있나요? 나는 명령줄을 통해 실행할 수 있는 간단한 코드를 선호합니다. 전임자: awk -F"\," 'print $1 $4'. 그러나 간단한 스크립트도 환영합니다.

'참고: 프로젝트 이름 끝에 인쇄하고 싶지 않습니다 .

답변1

다음을 사용해 보세요 awk.

awk -F "[]'[]" '/: AFFECTED/{print $1, $(NF-1)}' input
  • -F필드 구분 기호(FS)를 정의합니다. 이것은정규식 문자열, 포함캐릭터 클래스"문자 클래스에 포함된 모든 문자"를 의미하는 ( [..])는 필드 구분 기호입니다.

    • 여기에서 선택한 문자는 ', [또는 입니다 ].
    • ]닫는 문자로 처리되지 않도록 하려면 먼저 와야 합니다 . (당신도 탈출할 수 있어요!)
  • 첫 번째 필드는 $1first 로 끝나므로 '프로젝트 이름은 다음과 같습니다. $1

  • 영향을 받는 버전은 입니다 $(NF-1). ]마지막 문자와 마찬가지로 $NF비어 있습니다.

산출:

themostsimpleproject 7.19, 8.37

이는 문자열이 있는 줄을 검색 : AFFECTED한 다음 2개 이상이 영향을 받더라도 모든 이미지 버전을 출력합니다.

답변2

 awk -F "'" '{gsub(/:.*:/,"",$NF);gsub(/[\]\[]/,"",$NF);print $1,$NF}' filename

산출

themostsimpleproject   7.19 8.37

답변3

다음을 사용할 수도 있습니다 sed.

$ sed "s/^\(.*\)',.*\[\(.*\)\]$/\1 \2/" file
themostsimpleproject 7.19, 8.37

아니면 GNU 버전을 사용하세요

$ sed -E "s/^(.*)',.*\[(.*)\]$/\1 \2/" file 
themostsimpleproject 7.19, 8.37

답변4

또한 다음과 같이 제공됩니다 awk:

awk '{gsub(/[][]/,"");gsub(/[[:punct:]]/,"",$1);print $1, $(NF-1),$NF}' file
themostsimpleproject 7.19, 8.37 
  • [field1 에서 모든 구두점을 제거했습니다 ].gsub()
  • 그런 다음 첫 번째 필드와 마지막 두 필드를 인쇄합니다.

관련 정보