程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> SyBase數據庫 >> SyBase教程 >> awk應用-獲取文件的信息(一)

awk應用-獲取文件的信息(一)

編輯:SyBase教程

awk應用-獲取文件的信息(一)


現在我們來學習UNIX命令ls的幾個腳本。下面的執行命令ls -l得到的一個長列表樣本

$ ls -l
-rw-rw-rw- 1 dale project 6041 Jan 1 12:31 com.tmp
-rwxrwxrwx 1 dale project 1778 Jan 1 11 :55 combine.idx
-rw-rw-rw- 1 dale project 1446 Feb 15 22:32 dang
-rwxrwxrwx 1 dale project 1202 Jan 2 23:06 format.idx

這個列表是一個報告,其中的數據按行和列顯示。每個文件信息顯示在單獨的一行上。文件列表由9個列組成。文件的操作權限出現在第一列,文件的字節數顯示在第五列,文件名顯示在最後一列。在列之間由一個或多個空格來分隔,我們可以將每個列看做是一個字段。

在第一個例子中,我們將這個命令的輸出結果導入一個awk腳本中,該腳本打印出該文件列表中選定的字段。為了完成這項操作,我們將創建一個shell腳本使得能夠將數據輸送到用戶。因此, shell程序的結構是:

#!/bin/bash
ls -l $* | awk 'script'

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

我們希望awk腳本能夠打印文件的大小和名字。即打印第五個字段($5)和第九個字段($9)。

ls -l $* | awk '{
print $5"\t"$9
}'

如果將上面的代碼保存在文件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 += $5
++filenum
print $5"\t"$9
}'

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

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved