Shell-Script
有沒有辦法總結列出的文件的大小?
這是我用來列出一些文件的命令:
find . -name \*.extract.sys -size +1000000c -exec ls -lrt {} \; -rw-r--r-- 1 qa1wrk15 test 1265190 Sep 29 01:14 ./var/can/projs/ar/rep/extract/Sep/29/ar.ARAB-PI_7.20110929.extract.sys -rw-r--r-- 1 qa1wrk15 test 1345554 Sep 29 01:14 ./var/can/projs/ar/rep/extract/Sep/29/ar.ARAB-PI_2.20110929.extract.sys -rw-r--r-- 1 qa1wrk15 test 1370532 Sep 29 01:14 ./var/can/projs/ar/rep/extract/Sep/29/ar.ARAB-PI_3.20110929.extract.sys -rw-r--r-- 1 qa1wrk15 test 1399854 Sep 29 01:14 ./var/can/projs/ar/rep/extract/Sep/29/ar.ARAB-PI_8.20110929.extract.sys
等等。
現在我想通過總結第 5 列來計算這些文件的總大小。我想使用
awk
, 來做到這一點,所以我在特定目錄中測試了以下內容>ls -lrt | awk `{ print $1 }` ksh: syntax error at line 1 : `{' unmatched
我不明白問題是什麼,為什麼會出現這種語法錯誤。
我想試試
ls -lrt | awk `BEGIN {total = 0} {for(i=0;i<NR;i++){total+=$5}} END {printf "%d",total}
這也是,但是一個簡單的
awk
腳本不起作用。如果我錯了,或者如果有解決方法,請建議或糾正我。
首先,您應該使用直單引號 (
'
),而不是斜單引號 ( ```)。內
awk
聯腳本可能如下:ls -lrt | awk '{ total += $5 }; END { print total }'
因此,無需初始化
total
(awk
將其初始化為零),也無需循環,awk
已經在每一行輸入上執行腳本。
@enzotib 已經指出了您的語法錯誤是什麼-我將稍微切線。
對一列數字求和是不斷出現的事情之一。我最終得到了這個 shell 函式:
sumcol() { awk "{sum+=\$$1} END {print sum}" }
有了這個,你的解決方案就變成了:
ls -lrt | sumcol 5
這將對第 5 列中的數字求和並列印該值。