디렉토리에 40 개의 파일이 있고 각 파일의 첫 번째 열에 "2"가있는 줄이 개별적으로있는 횟수를 계산하고 싶습니다.
나는 이와 같은 것을 시도하고 있지만 각 파일의 총 합계를 인쇄하고 개별 합계를 원합니다.
find . -type f -print0 | xargs -0 awk '($1=="2"){++count} END {print count}'
명확하게하기 위해 이것은 예입니다.
FILE_1
2 345 123 4
2 4567 2344 6
3 2345 657 87
6 234 345 6
FILE_2
1 12 436 7
2 54 86 8
2 23 48 0
2 098 0 8
8 98 9 0
인쇄:
FILE_1 2
FILE_2 3
내가 실제로 얻는 것 :
인쇄:
5
당신의 도움을 주셔서 감사합니다!
당신은 당신을 grep
위해 그들을 셀 수 있습니다. 필요한 줄이로 시작한다고 가정하면 2
다음을 사용할 수 있습니다.
grep -c '^[[:space:]]*2\>' $(find . -type f -print0 | xargs -0 echo)
\>
정규식 보장하지만 일치의 끝 (20) 대신 2로 시작하는 같은 선으로 거짓 경보를 피하기 위해 "단어 경계"에서 중지됩니다.
노트 :
찾고있는 "40 개 파일"이 모두 동일한 디렉토리 (하위 디렉토리가 아님)에있는 경우 다음과 같이 반복 find
하지 않고 현재 디렉토리 만 검색하도록 할 수 있습니다 (대기 시간을 줄임).
find -maxdepth 1 . -type f -print0
최신 정보:
2가 다른 열에있는 파일을 첫 번째 열과 일치 시키려면 다음을 수행하십시오.
COLNUM=3
TOMATCH=$(($COLNUM-1))
grep -cE "^[[:space:]]*([0-9]+[[:space:]]+){$TOMATCH}2\>" \
$(find . -type f -print0 | xargs -0 echo)
COLNUM
필요에 따라 변경할 수 있습니다 . 기본적으로 이것이하는 일은 COLNUM-1
단어 경계에서 2가 뒤 따르는 열 을 일치 시키는 것입니다. -E
스위치는 사용자가 사용할 수 있도록 확장 된 정규 표현식 수 있도록하기 위해 필요한 {}
수치 한정 기호를 지정하는 표기법 (예 : '이전의 패턴이 여러 번 일치').
그러나 파일에 존재하지 않는 열 번호를 입력하면 정규식이 자동으로 실패합니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다