2014-10-16 30 views
0

我有一個以「output」開頭的文件列表,我想總結所有文件中的總行數。awk問題,在各種文件中加總行數

這裏是我的策略:

for f in `find outpu*`;do wc -l $f | awk '{x+=$1}END{print $1}' ; done 

之前在管道,如果有一種方法,我可以做類似>>到一個臨時變量,然後後運行awk命令,我可以實現這個目標。

任何提示?

+0

您的「輸出」文件是否都在當前目錄中,或者期望在子目錄中找到? – 2014-10-16 19:43:03

+0

您應該將'END'塊中的'$ 1'更改爲'x'。仍然不是一個有效的方式來做到這一點。總是值得看看你是否可以避免循環。 – joepd 2014-10-16 19:45:16

回答

2

利用這個來了解細節和金額:

wc -l output* 

,這隻能看到總和:

wc -l output* | tail -n1 | cut -d' ' -f1 
+3

+1,但這更簡單'cat輸出* | wc -l' - 貓的有用用法 – 2014-10-16 19:40:19

+0

最終剪切-d''不起作用.....我用awk {print $ 1}代替。 – user3659451 2014-10-16 20:50:28

0

當心,這find命令不僅會在當前目錄中找到的東西,如果有是與outpu*匹配的一個文件。這樣做的

方式一:

awk 'END{print NR}' $(find 'outpu*') 

假如沒有匹配溢出你的shell的最大指令長度上限文件名的瘋狂量。

+0

'發現'輸出*''沒有做你想做的。此外,如果您正在尋找當前目錄中的'outpu *',則不需要'find'。如果你想搜索subdirs,那麼使用'find。 -name'輸出*''。另外,如果任何文件名中有空白字符,'awk'END {print NR}'$(find -name'outpu *')'將會失敗。您可以通過使用以下方法避免這種情況,同時仍然保留'awk'方法:find。 -name'outpu *'-exec cat {}';' | awk'END {print NR}''。 – John1024 2014-10-16 19:49:09

1

下面是一些東西的樂趣,檢查出來:

grep -c . out* | cut -d':' -f2- | paste -sd+ | bc 

所有線路,包括空的:

grep -c '' out* | cut -d':' -f2- | paste -sd+ | bc 

您可以在grep與條件文件的播放上線