특정 필드에 대한 패턴과 함께 awk를 사용하는 방법은 무엇입니까?

특정 필드에 대한 패턴과 함께 awk를 사용하는 방법은 무엇입니까?

다음과 같은 줄이 포함된 파일을 탐색하고 있습니다.

  1. project: 임의의 프로젝트 이름
  2. rf1 rf2 rf3 rf4 rf5 rf6 rf7
  3. rv1 rv2 rv3 rv4 rv5 rv6 rv7
  4. 기타 임의의 라인

어디

  1. 2., 3.그리고 4.항상 다음과 같은 줄 뒤에1.
  2. rv7(임의의 값 7)은 foo다음 중 하나 입니다.bar

예:

project: potatopotato
rf1 rf2 rf3 rf4 rf5 rf6 rf7
rv1 rv2 rv4 rv4 rv5 rv6 rv7
...
THE END

가장 좋은 시나리오는 다음 필드를 사용하여 .csv를 만들고 싶습니다.

project rf2 rf1 rf7 rf5 rf6

내가 지금 가지고 있는 것은 다음과 같습니다.

awk '/foo|bar/{print $2",",$1",",$NF",",$(NF-2)",",$(NF-1)}'

문제는 임의의 값이 공백인 경우 필드 수가 적기 때문에 엉망이 된다는 것입니다. 일반적으로 rv6은 입니다 NULL. 긍정적인 측면에서는 rv5와 rv6이 다음과 같이 ipv4 패턴을 따른다는 것을 알고 있습니다.1.1.1.1

그래서 내 질문은 다음과 같습니다

  1. 내가 가지고 있는 것을 어떻게 변경 $(NF-2)하고 $(NF-1)IP 패턴을 따르는지 확인하여 성공적으로 가져올 수 있습니까?
  2. awk '/project/{print $2}' 내가 원하는 .csv를 만들 수 있도록 어떻게 결합할 수 있나요?

더 좋은 방법이나 다른 제안사항이 있으면 댓글 부탁드립니다. 감사해요.

답변1

$ awk 'NR==2{print p, $2, $1, $7, $5, $6} {sub(/:/,""); p=$1}' file
project rf2 rf1 rf7 rf5 rf6

$ awk -v OFS=',' 'NR==2{print p, $2, $1, $7, $5, $6} {sub(/:/,""); p=$1}' file
project,rf2,rf1,rf7,rf5,rf6

이것이 필요한 전부가 아닌 경우 요구 사항을 명확히 하고 보다 유용하고 정확한 입력/출력 예제를 제공하도록 질문을 편집하십시오.

관련 정보