이것은 내 텍스트 파일 중 하나입니다.
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