AWK: 필드의 단어 수를 기준으로 행을 선택하는 방법은 무엇입니까?

AWK: 필드의 단어 수를 기준으로 행을 선택하는 방법은 무엇입니까?

이것은 내 텍스트 파일 중 하나입니다.

1|this|1000
2|that|2000
3|hello|3000
4|hello world|4000
5|lucky you|5000
6|awk is awesome|6000
.
.
.

$2에서 두 단어만 포함하는 줄(4번째와 5번째 줄)만 인쇄하려면 어떻게 해야 합니까?

제가 시도한 것은 다음과 같습니다. 그러나 단어 수 대신 문자 수를 계산합니다.

awk -F"|" '{if(length($2==2) print $0}'

답변1

awk 함수의 반환 값을 사용할 수 있습니다 split.

$ awk -F'|' 'split($2,a,"[ \t]+") == 2' file
4|hello world|4000
5|lucky you|5000

답변2

gsub대신 함수의 반환 값을 사용할 수도 있습니다 .

awk -F'|' '{l=$0} gsub(/[ \t]+/,"",$2)==1{print l}'

답변3

awk '/^.+\|\w+ \w+\|/' input.txt

설명하다:

  • '/^.+\|\w+ \w+\|/'- 이 패턴과 일치하는 모든 줄을 인쇄합니다.
  • ^- 줄의 시작 부분에서 시작합니다.
  • .+- 하나 이상의 임의 문자.
  • \|- 파이프 캐릭터. 문자 그대로 이해하려면 백슬래시로 이스케이프해야 하며, 그렇지 않으면 "or" 기호로 처리됩니다.
  • \w+ \w+\- 임의의 단어 문자, 공백, 임의의 단어 문자, 즉 단어 공백 단어 - 정확히 필요한 것입니다.
  • \|- 두 번째 파이프 문자입니다.

입력하다

1|this|1000
2|that|2000
3|hello|3000
4|hello world|4000
5|lucky you|5000
6|awk is awesome|6000

산출

4|hello world|4000
5|lucky you|5000

관련 정보