이런 명령이 있어요
rga --files-with-matches --count-matches --sort path -i -e "use cases?" -e "user stor(y|ies)" -e "Technical debt" -e "Code Quality" -e "software development" -e "Agile Manifesto"
출력은 다음과 같습니다
a1.pdf:18
a2.pdf:10
a3.pdf:14
....
여기에 :NUM
일치 횟수가 있습니다.
10개 이상의 일치 항목이 있는 모든 파일을 원합니다(출력을 다른 명령으로 파이프할 수 있도록 콜론과 숫자가 없음). 좋다:
a1.pdf
a3.pdf
....
시도해 보았지만 .. | cut -d':' -f2
숫자만 제공됩니다. .. | cut -d':' -f1
파일 이름만 제공됩니다.
여기서 해결책은 무엇입니까?
답변1
이는 파일 이름에 문자가 포함된 경우에도 작동합니다 :
. 두 개의 캡처 그룹을 사용합니다. 첫 번째 :
그룹은 줄의 마지막 문자(파일 이름)까지(포함하지 않음) 모든 것을 캡처하고, 두 번째 그룹은 마지막 문자 :
(개수) 뒤의 모든 숫자를 캡처합니다. 이 패턴과 일치하지 않는 입력 행은 무시됩니다.
$ rga ... | perl -n -E 'm/^(.*):(\d+)$/; say $1 if $2 > 10'
a1.pdf
a3.pdf
개행 문자가 포함된 파일 이름에는 작동하지 않습니다. 필요하고 rga
NUL로 구분된 출력을 생성할 수 있는 경우(예: 또는 유사한 옵션 사용 -0
) -z
이를 Perl의 옵션과 함께 사용하여 -0
NUL로 구분된 입력을 읽을 수 있습니다.
답변2
그리고 awk
:
... | awk -F: '$NF>10{ sub(/:[0-9]+$/, ""); print }'
레코드를 분할 :
하고 마지막 필드가 10보다 큰지 테스트합니다. 조건이 true이면 :
레코드 끝에서 최소한 하나의 숫자를 제거하십시오. (수정된) 기록을 인쇄합니다.