2013-10-24 4 views
0

나는 껍질과 물건에 새 것이므로 문제가 발생했습니다.tcsh의 정수/정수와 문자열의 합계

find $i -maxdepth 1 -type f -exec wc -l {} \; | tr -s " " | cut -d " " -f 2 

내가 디렉토리 목록과 상단입니다 : 나는 내가 위해 $ 난에 각 파일의 라인 길이를 계산 함께 디렉토리이와

에 파일이 얼마나 많은 줄 계산해야 코드는 다음의 출력이 많은 선이 실제 파일을 얼마나 수 있습니다 foreach는주기에, 지금은 단지 그들에게

합계해야하지만 난 디렉토리

트라이에있는 모든 파일의 아이폰에 합계를 필요 어떤 변수에 줄을 추가하려면 :

@ variable = (`find $i...`) 

그러나 나에게 잘못된 숫자 오류가 발생했습니다.

아무도이 문제를 해결하는 방법을 알고 있습니까? 메신저 절망, 모든

답변

0

먼저 선을 추가합니다 wc 명령은 당신을 위해 계산, 하루 종일 그 일을하려고, 그래서 이것은 :

wc -l $i/* | tail -n 1 

매우 거의 당신이 원하는 것을 할 것입니다; 차이점은 일반 파일 이외의 것들을 제거하지 않으며, 이름이 .으로 시작하는 "숨김"파일을 포함하지 않는다는 것입니다. 이것 :

wc -l `find $i -maxdepth 1 -type f -print` /dev/null | tail -n 1 

원하는대로해야합니다. (어떤 파일이 디렉토리가없는 경우 /dev/null의 추가는 경우를 처리 할 수있는 트릭입니다.) 출력은 (선행 공백 포함)

210 total 

과 같이 될 것입니다; 당신이 awk를 사용하여 캡처 할 수 있습니다 :

wc -l `find $i -maxdepth 1 -type f -print` /dev/null | tail -n 1 | awk '{print $1}' 

당신이 번호에게 자신을 추가 할 쉘을 사용하려면이 그것을 수행해야합니다

@ total = 0 
foreach file (`find $i -maxdepth 1 -type f`) 
    @ total += `wc -l < $file` 
end 

당신이로 실행할 수있는 매우 큰 디렉토리에 대한 생각 커멘드 행의 길이에 제한이 있습니다.

마지막으로, 나는 csh와 tcsh가 프로그래밍을위한 좋은 껍질이 아니라는 것을 알리는 의무가있다. 그들의 구문은 매우 불규칙합니다. 저는 수십 년 동안 그것들을 사용 해왔고, 특정 구조가 작동하는지 여부를 알아보기 위해 시행 착오에 의지해야합니다. 나는 sh 및/또는 bash을 대신 배우는 것이 좋습니다. this article을 참조하십시오.

+0

감사합니다. 마지막 하나가 나를위한 최상의 솔루션이었습니다. 거의 하루 종일 생각하고있었습니다. 첫 번째는 매우 흥미롭고 두 번째와 세 번째는 작동하지 않았으며, 결코 끝내지 않는 것처럼 보입니다. – Ricsie

+0

Im은 방금 유닉스 및 쉘 스크립팅으로 시작했으며 우리 대학교에서 우리는 tw ogroups에 있으며 bash와 유닉스에 익숙한 경험이있는 사람들은 tcsh를 사용합니다. – Ricsie

+0

@Ricsie : 신규 사용자는 스크립팅을 위해 tcsh를 배우고 있습니까? 그것은 정말 나쁜 생각입니다. –