awk應用 獲取檔案的資訊(二)

2021-07-03 10:49:27 字數 1078 閱讀 5562

我們所編寫的操作將應用於所有的輸入行。當awk讀入所有的輸入行後,所產生的總數必須列印出來,因此,我們編寫了乙個由end規則控制的操作:

end 

我們還可以使用begin 規則給報告增加列標題。

begin 

現在,我們將這些程式**放在檔案filesum中並作為乙個命令執行。

$ . /filesum c

*bytes file

882 ch01

1771 ch03

1987 ch04

6041 com.tmp

1778 combine.idx

total: 

12459 bytes 

(5 files

這個命令的優點是能夠確定乙個目錄中檔案的大小。在顯示基本機制之後,還需要注意幾個問題。第乙個問題出現在當使用ls -l命令顯示整個目錄時,列表中包含乙個指定目錄中塊的總數的行。在前面例子(所有以"c" 開頭的檔案)中的部分列表中沒有包含這一行。但是如果整個目錄都列出來,那麼在輸出中將會包含下面的一行:

total 555

我們對塊總數並不感興趣,因為程式顯示了檔案的總的大小。現在filesum沒有列印這一行,但是它讀入了這一行並使計數器filenum得到了遞增。

這個指令碼還有乙個問題,也就是它如何處理子目錄。參見下面ls -l 執行結果中的一行:

drwxrwxrwx 

3 dale project 

960 feb 

115:

47 sed

第一列(檔案的操作許可權)中的首字元"d"表示該檔案是子目錄。檔案的大小(960b)並不表示子目錄下的檔案的大小,因此,經常錯誤地把這個數加到檔案總的大小上。因此,指出這是乙個目錄可能是有用的。

如果想列出子目錄中的檔案,可以在命令列中提供-r(遞迴)選項。該選項將傳遞給ls命令。然而,當它識別每個目錄時,列表有一些區別。例如,要識別子目錄old, ls -lr將產生乙個空行,跟隨:"./old"

我們前面的指令碼忽咯了這行及其前面的空行,但是仍然遞增檔案計數器。幸運的是,我們可以設計規則來處理這類情況。我們來看下面修改後的、加了注釋的指令碼,請參照下一節的內容。

參考資料:

awk應用 獲取檔案的資訊(一)

現在我們來學習unix命令ls的幾個指令碼。下面的執行命令ls l得到的乙個長列表樣本 ls l rw rw rw 1 dale project 6041 jan 112 31 com.tmp rwxrwxrwx 1 dale project 1778 jan 111 55 combine.idx ...

awk應用 資訊的檢索

awk程式可以用於檢索資料庫中的資訊,資料庫實際上是各種型別的文字檔案。文字檔案的結構化越好,對其處理就越容易工作,儘管這個結果不過是由獨立的單詞組成的行。下面這個首字母縮寫詞列表是乙個簡單的資料庫。cat acronyms basic beginner s ai i purpose symbol ...

獲取檔案資訊

include struct stat 函式宣告 int stat const char path,struct stat buffer 注意 win32 stat linux stat 引數 path 檔案或者資料夾的路徑 buffer 獲取的資訊儲存在記憶體中 返回值 正確 返回0 錯誤 返回 ...