2017-02-07 5 views
1

같은 확장자를 가진 디렉토리의 모든 파일에서 재귀 적으로 '['문자를 확인하고 싶습니다. *.기음. 솔라리스 유닉스에서 일하고 있습니다. 여러 파일에서 발생 횟수 계산하기

나는 다른 게시물에 주어진 몇 가지 솔루션을 시도하고,이 OS와 내가 명령 grep -o 사용할 수 없기 때문에 작동 하나,이 하나입니다

x는 내가 원하는 발생이
sed 's/[^x]//g' filename | tr -d '012' | wc -c 

입니다 계산하기. 이것은 작동하지만 재귀 적이 지 않습니다. 재귀 적으로 만들 수있는 방법이 있습니까?

+0

'filename'을'*'(현재 디렉토리)로 바꾸거나'/ dir/*'을 다른 디렉토리로 바꾸거나'/dir1/*.txt/dir2/*로 재귀 적으로 만들 수 있습니다. txt는 두 개의 디렉토리를 스캔합니다. 모든 디렉토리에 대해 recursivelly를 검색하려면'find'를 사용하는 것이 올바른 방법입니다. –

+0

George, 고맙습니다. Grisha가 제게 할 일을 제안하고 감사를 드렸습니다. 감사합니다! – Vpdj

답변

1

find에서 재귀 목록을 가져와 -exec 인수와 함께 명령을 실행할 수 있습니다.

내가 좋아하는 게 좋을 것 :

find . -name '*.c' -exec cat {} \; | tr -c -d ']' | wc -c 

tr-c 인수가 제공되는 문자열의 반대를 사용하는 것을 의미합니다 -이 경우, 즉 모든 하지만] 일치합니다.

find 명령의 .은 현재 디렉토리에서 검색하는 것을 의미하지만 다른 디렉토리 이름도 제공 할 수 있습니다.

+0

이 솔루션은 완전히 작동합니다. 대단히 감사합니다! – Vpdj

0

nawk를 설치하시기 바랍니다. 그러면 다음을 할 수 있습니다.

nawk '{a+=gsub(/\]/,"x")}END{print a}' /path/* 
+0

nawk는 내 OS와 잘 작동하지 않지만 답장을 보내 주셔서 감사합니다! – Vpdj

0

스 니펫 코드 자체를 쓸 수 있습니다. 난 당신이 다음을 실행하는 것이 좋습니다 :

awk '{for (i=1;i<=NF;i++) if ($i=="[") n++} END{print n}' *.c 

이 현재 디렉토리에있는 모든 파일에 "["를 검색 및 발생 횟수를 인쇄합니다.

+0

나는이 해결책을 시도했으나,이 사건이 일어나는 곳의 파일을 인쇄하는 것처럼 보였고 모든 파일에 문자가 몇 번 나타나는지 알고 싶다. – Vpdj

+0

정말요? 왜냐하면 같은 코드를 사용했기 때문에 디렉토리에 5 개의 파일 만 포함 된 경우에도 10이 표시되었습니다. –

+0

예 그 코드를 ']'문자가 6 번 발생하는 하나의 파일과 함께 사용하고 나에게 1을 보여주었습니다. 그런 다음 동일한 수의 파일을 생성하여 2 개를 보여 주므로 결론적으로 파일 수만 계산했습니다 그 캐릭터는 적어도 한 번 이상 등장했는데 왜 다른 해결책을 가지고 있는지 모르겠다. 나는 틀린 일을하고있다. 답장을 보내 주셔서 감사합니다! – Vpdj