2013-10-24 40 views
0

我是shell和東西的新手,我遇到了一個問題。 我都數不過來有多少行有一個目錄一起將tcsh/sum字符串中的整數求和爲整數

與此有關的文件,我算每個文件的線路長度爲$ I:

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

我是一個目錄列表和上代碼是在foreach循環 的這個輸出是數量多少行有實際的文件,現在我只是來總結他們

,但我需要總結的所有文件的lenght目錄

三編輯添加行到一些變量:

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

但它給了我嚴重的數字錯誤。

有人有一個想法如何解決這個問題? IM絕望,試圖做到這一點一整天,

回答

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}' 

如果你想用shell自己加起來的數字,這應該這樣做:

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

雖然你可能會遇到非常大的目錄限制命令行的長度。

最後,我覺得有義務讓你知道csh和tcsh不是編程的好shell。他們的語法非常不規範。幾十年來我一直在使用它們,而且我仍然需要嘗試進行反覆試驗,以確定某個特定的結構是否可以工作。我強烈建議改爲學習sh和/或bash。見this article

+0

謝謝,最後一個對我來說是最好的解決方案,幾乎整天都在想如何去做,第一個很有意思,第二個和第三個不起作用,他們從來沒有看起來像他們循環。 – Ricsie

+0

我剛剛開始使用unix和shell腳本,在我們的大學我們是兩個組,有經驗的使用bash和uncix的新手,我們使用tcsh – Ricsie

+0

@Ricsie:新手被教tcsh腳本?這是一個非常糟糕的主意。 –