awk命令簡介
在shell命令或編程中,可以用AWK強大的的文本處理能力。如果要格式化報文或從一個大的文本文件中抽取數據包,那麼awk可完成這些任務。awk是一種解釋的編程語言。awk也是shell過濾工具中最難掌握的。awk是一種自解釋的編程語言。結合awk和sed和grep,將會使awk編程更加容易。
awk語言最基本的功能是在文件或字符串中基於指定的規則浏覽和抽取信息。
有三種方式可調用awk.
<1>.命令行方式。
<2>.將所有的awk命令插入一個文件,並利用chmod使awk文件成為執行。
<3>.將所有的awk命令插入一個單獨文件,然後調用。
以下簡單介紹awk的各種方式,詳細請查看相關另外文檔
在awk中有四種概念。
1.抽取域
2.匹配正則表達式
3.比較域
4.向awk傳遞參數
以下簡單介紹:
1).保存awk輸出: #awk \'{print $0}\' myfile>newfile
2).使用tee,在輸出到文件的同時輸出到屏幕(利用管道\'|\')
#awk \'{print $0}\' myfile |tee newfile
3).打印報告頭,#awk \'BEGIN {print hello,this is Titlen---------}{print $0}\' newfile
4).打印信息尾.#awk \'BEGIN{print $0} END {end of file.}\' myfile
5).匹配,如下若在myfile第二列中帶有BROWN,則打印信息
#awk \'{if ($2~/BROWN/) print $0}\' myfile
6).精確匹配,同上,只是將~改為==
7).不匹配,有時要浏覽信息並抽取不匹配操作的記錄,與~相反的符號是!,如下
#awk \'$0 !~/BROWN/\' myfile
8).比較
如小於: #awk \'if ($1<$2) print $1\' myfile
9).設置大小寫 #awk \'[Gg]reen/\' myfile
10).任意字符,表達式/^...a/意為前三個字符是任意字符
//-------------------------------------------------------
linux tee 命令詳解
功能說明:讀取標准輸入的數據,並將其內容輸出成文件。
語 法:tee [-ai][--help][--version][文件...]
補充說明:tee指令會從標准輸入設備讀取數據,將其內容輸出到標准輸出設備,同時保存成文件。
參 數:
-a或--append 附加到既有文件的後面,而非覆蓋它.
-i-i或--ignore-interrupts 忽略中斷信號。
--help 在線幫助。
--version 顯示版本信息。
//--------------------------------------------------------------------------------------
Sed 命令列可分成編輯指令與文件檔部份。其中 , 編輯指令負責控制所有的編輯工作 ; 文件檔表示所處理的檔案。
sed 的編輯指令均由位址(address)與函數(function)兩部份組成 , 其中 , 在執行時 , sed 利用它的位址參數來
決定編輯的對象;而用它的函數參數(解[3])編輯。
此外 , sed 編輯指令 , 除了可在命令列上執行 , 也可在檔案內執行。其中差別只是在命令列上執行時 , 其前必
須加上選項 -e ; 而在檔案(解[4])內時 , 則只需在其檔名前加上選項 -f。另外 , sed 執行編輯指令是依照它
們在命令列上或檔內的次序。
下面各節 , 將介紹執行命令列上的編輯指令 、sed 編輯指令、執行檔案內的編輯指令、執行多個檔案的編輯、及
執行 sed 輸出控制。
2.1 執行命令列上的編輯指令
2.2 sed 編輯指令
2.3 執行檔案內的編輯指令
2.4 執行多個檔案的編輯
2.5 執行 sed 輸出控制
2.1.執行命令列上的編輯指令
當編輯指令(參照[section 2.2])在命令列上執行時 , 其前必須加上選項 -e 。其命令格式如下 :
sed -e \'編輯指令1\' -e \'編輯指令2\' ... 文件檔
其中 , 所有編輯指令都緊接在選項 -e 之後 , 並置於兩個 \' 特殊字元間。另外 , 命令上編輯指令的執行是由
左而右。
一般編輯指令不多時 , 使用者通常直接在命令上執行它們。例如 , 刪除 yel.dat 內 1 至 10 行資料 , 並將其
馀文字中的 yellow 字串改成 black 字串。此時 , 可將編輯指令直接在命令上執行 , 其命令如下 :
sed -e \'1,10d\' -e \'s/yellow/black/g\' yel.dat
在命令中 , 編輯指令 \'1,10d\'(解[5])執行刪除 1 至 10 行資料 ; 編輯指令 \'s/yellow/black/g\'(解[6]) ,
yellow 字串替換(substuite)成 black 字串。
2.2 sed 的編輯指令
sed 編輯指令的格式如下 :
[address1[,address2]]function[argument]
其中 , 位址參數 address1 、address2 為行數或 regular expression 字串 , 表示所執行編輯的資料行 ; 函數參
數 function[argument] 為 sed 的內定函數 , 表示執行的編輯動作。
下面兩小節 , 將仔細介紹位址參數的表示法與有哪些函數參數供選擇。
2.2.1 位址(address)參數的表示法
實際上 , 位址參數表示法只是將要編輯的資料行 , 用它們的行數或其中的字串來代替表示它們。下面舉幾個例子
說明(指令都以函數參數 d(參照[section4.2]) 為例) :
刪除檔內第 10 行資料 , 則指令為 10d。
刪除含有 man 字串的資料行時 , 則指令為 /man/d。
刪除檔內第 10 行到第 200 行資料, 則指令為 10,200d。
刪除檔內第 10 行到含 man 字串的資料行 , 則指令為 10,/man/d。
接下來 , 以位址參數的內容與其個數兩點 , 完整說明指令中位址參數的表示法(同樣也以函數參數 d 為例)。
位址參數的內容:
位址為十進位數字 : 此數字表示行數。當指令執行時 , 將對符合此行數的資料執行函數參數指示的編輯動作。例如 ,
刪除資料檔中的第 15 行資料 , 則指令為 15d(參照[section4.2])。其馀類推 ,如刪除資料檔中的第 m 行資料 , 則
指令為 md 。
位址為 regular expression(參照[附錄 A]):
當資料行中有符合 regular expression 所表示的字串時 , 則執行函數參數指示的編輯動作。另外 , 在
regular expression 前後必須加上 /。例如指令為 /t.*t/d , 表示刪除所有含兩 t 字母的資料行。其中 , .
表示任意字元; * 表示其前字元可重任意次 , 它們結合 .* 表示兩 t 字母間的任意字串。
位址參數的個數 : 在指令中 , 當沒有位址參數時 , 表示全部資料行執行函數參數所指示的編輯動作; 當只有一位址
參數時 , 表示只有符合位址的資料行才編輯 ; 當有兩個位址參數 , 如 address1,address2 時 , 表示對資料區執行
編輯 , address1 代表起始資料行 , address2 代表結束資料行。對於上述內容 , 以下面例子做具說明。
例如指令為
d
其表示刪除檔內所有資料行。
例如指令為
5d
其表示刪除檔內第五行資料。
例如指令為
1,/apple/d
其表示刪除資料區 , 由檔內第一行至內有 apple 字串的資料行。
例如指令為
/apple/,/orange/d
其表示刪除資料區 , 由檔內含有 apple 字串至含有 orange 字串的資料行
2.2.2 有那些函數(function)參數
下頁表中介紹所有 sed 的函數參數(參照[chapter 4])的功能。
函數參數 功能
: label 建立 script file 內指令互相參考的位置。
# 建立解
{ } 集合有相同位址參數的指令。
! 不執行函數參數。
= 印出資料行數( line number )。
a 添加使用者輸入的資料。
b label 將執行的指令跳至由 : 建立的參考位置。
c 以使用者輸入的資料取代資料。
d 刪除資料。
D 刪除 pattern space 內第一個 newline 字母 前的資料。
g 拷貝資料從 hold space。
G 添加資料從 hold space 至 pattern space 。
h 拷貝資料從 pattern space 至 hold space 。
H 添加資料從 pattern space 至 hold space 。
l 印出 l 資料中的 nonprinting character 用 ASCII 碼。
i 插入添加使用者輸入的資料行。
n 讀入下一筆資料。
N 添加下一筆資料到 pattern space。
p 印出資料。
P 印出 pattern space 內第一個 newline 字母 前的資料。
q 跳出 sed 編輯。
r 讀入它檔內容。
s 替換字串。
t label 先執行一替換的編輯指令 , 如果替換成牛p>則將編輯指令跳至 : label 處執行。
w 寫資料到它檔內。
x 交換 hold space 與 pattern space 內容。
y 轉換(transform)字元。
雖然 , sed 只有上表所述幾個擁有基本編輯功能的函數 , 但由指令中位址參數和指令與指令間的配合 , 也能使
sed 完成大部份的編輯任務。
2.3 執行檔案內的編輯指令
當執行的指令太多 , 在命令列上撰寫起來十分混亂 , 此時 , 可將這些指令整理儲存在檔案
(譬如檔名為 script_file )內 , 用選項 -f script_file , 則讓 sed 執行 script_file 內的編輯指令。其命
令的格示如下 :
sed -f script_file 文件檔
其中 , 執行 script_file 內編輯指令的順序是由上而下。例如上一節的例子 , 其可改成如下命令:
sed -f ysb.scr yel.dat
其中 , ysb.scr 檔的內容如下 :
1,10d
s/yellow/black/g
另外 , 在命令列上可混合使用選項 -e 與 -f , sed 執行指令順序依然是由命令列的左到右, 如執行至 -f 後
檔案內的指令 , 則由上而下執行。