Shell-Script

有沒有辦法總結列出的文件的大小?

  • July 10, 2018

這是我用來列出一些文件的命令:

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

因此,無需初始化totalawk將其初始化為零),也無需循環,awk已經在每一行輸入上執行腳本。

@enzotib 已經指出了您的語法錯誤是什麼-我將稍微切線。

對一列數字求和是不斷出現的事情之一。我最終得到了這個 shell 函式:

sumcol() 
{ 
   awk "{sum+=\$$1} END {print sum}"
}

有了這個,你的解決方案就變成了:

ls -lrt | sumcol 5

這將對第 5 列中的數字求和並列印該值。

引用自:https://unix.stackexchange.com/questions/21678