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

2021-07-03 10:22:51 字數 1539 閱讀 6527

現在我們來學習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

-rw-rw

-rw-1 dale project 

1446 feb 

1522: 32 dang

-rwxrwxrwx 

1 dale project 

1202 jan 

223:06 format.idx

這個列表是乙個報告,其中的資料按行和列顯示。每個檔案資訊顯示在單獨的一行上。檔案列表由9個列組成。檔案的操作許可權出現在第一列,檔案的位元組數顯示在第五列,檔名顯示在最後一列。在列之間由乙個或多個空格來分隔,我們可以將每個列看做是乙個字段。

在第乙個例子中,我們將這個命令的輸出結果匯入乙個awk指令碼中,該指令碼列印出該檔案列表中選定的字段。為了完成這項操作,我們將建立乙個shell指令碼使得能夠將資料輸送到使用者。因此, shell程式的結構是:

#!/bin/bash

ls-l $

*| awk 

'script'

shell使用$*變數來擴充套件通過命令列傳遞的所有變數(這裡可以使用$1來傳遞第乙個變數,但是傳遞所有的變數將具有更大的靈活性)。這些引數可能是檔名、目錄或ls命令的附加選項。如果沒有指定引數, "$*"將為空並且顯示當前目錄。因此ls命令的輸出可以傳給awk,即使沒有給出檔名也能自動讀取標準的輸入。

我們希望awk指令碼能夠列印檔案的大小和名字。即列印第五個字段($5)和第九個字段($9)。

ls-l $

*| awk 

''如果將上面的**儲存在檔案fls中並執行該檔案,則可以執行fls檔案:

$ chmod 

+x fls

$ ./fls

6041 com.tmp

1778 combine.id

1446 dang

1202 format.idx

$ ./fls com

*6041 com.tmp

1778 combine.idx

以上程式所做的工作就是讀入乙個長列表並將其減少為兩個字段。現在我們來產生報告,增加一些新的功能以產生一些資訊,這是ls -l列表所沒有提供的。我們將每個檔案的大小相加,得到列表中所有檔案的總位元組數。我們還能夠跟蹤檔案的數量並計算出總數。增加這些功能包括兩部分。首先累計每個輸入行。我們建立變數sum來累加列表中檔案的大小,用變數filenum來累加列表中檔案的數量。

ls-l $

*| awk 

''第乙個表示式使用賦值操作符+=。它的功能是將第五個欄位的值加到變數sum的當前值上。第二個表示式遞增變數filenum的值。該變數作為乙個計數器,每次表示式計算一次,計數器加1。

參考資料:

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

我們所編寫的操作將應用於所有的輸入行。當awk讀入所有的輸入行後,所產生的總數必須列印出來,因此,我們編寫了乙個由end規則控制的操作 end 我們還可以使用begin 規則給報告增加列標題。begin 現在,我們將這些程式 放在檔案filesum中並作為乙個命令執行。filesum c bytes...

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 錯誤 返回 ...