awk知識點小結1
awk由main input迴圈組成,一個迴圈是一個例程,每個例程重複執行直到滿足終止條件;
模式匹配
/^$/ {print “This is a blank line.”} --尋找空行並列印提示資訊
~用於測試一個欄位的正規表示式,!~表示不匹配
$5 ~ /MA/ { print $1 “, “ $6}
註釋
以#開頭,換行符結束,可在任何地方新增
條件語句
If ( condition) {
Action1
}
[ else
Action2
]
條件運算子
Expr ? action1 : action2
迴圈
While (condition) {
Action1
}
Do {
Action1
} While (condition)
For (expr1; expr2; expr3)
Action1
陣列
Array[subscript] = value
Delete array[subscript]
下標可以是一個字元或一個數值,為稀疏陣列
ARGV—命令列引數的陣列,第1個下標為0,最後一個為ARGC – 1
ENVIRON –環境變數陣列,
BEGIN {
For( x = 0; x < ARGC; ++x)
If( ARGV[x] !~ /^[0-9]+$/ ) { --尋找非數字
Print ARGV[x], “is not an integer.”
Exit 1
}
}
--列印當前所有系統變數
[oracle@ ~]$ more environ.awk
BEGIN {
for (env in ENVIRON)
print env "=" ENVIRON[env]
}
[oracle@ ~]$ awk -f environ.awk
TERM=vt100
….
SHELL=/bin/bash
字串函式
gsub(r,s,t) –在字串t中用s替換和正規表示式r匹配的所有字串,若沒有t則給出$0
sub(r,s,t) –
注:gsub()為global替換,而sub()只實現第一個位置
index(s,t) –返回t在s中的位置
length(s)
match(s,r) –如果正規表示式r在s中出現,則返回出現的起始位置
substr(s, p, n) – 返回s中從p開始最大長度為n的子串
tolower(s)/toupper(s)
split(string, array, separator) --將任何字串string分解到陣列array中
z = split($1, array, “ “)
For ( i = 1; I <= Z; i++)
Print I, array[i]
[oracle@ ~]$ cat test[1-3]
I am test1
I am test2
I am test3
[oracle@ ~]$ cat test
.so "test1"
this is 2nd line
.so test"2
this is 4rd line
.so test3
[oracle@ ~]$ cat gsub.awk --搜尋以.so開頭的行,對其第2個引數去除”,接著執行cat $2,最後next
/^\.so/ {
gsub(/"/,"",$2)
system("cat " $2)
next
}
{ print }
[oracle@ ~]$ awk -f gsub.awk test
I am test1
this is 2nd line
I am test2
this is 4rd line
I am test3
內建函式
Getline
類似awk的next,即讀取下一行資料;
返回值:1—讀取成功 0—遇到檔案末尾 -1—遇到錯誤
從檔案讀取資料
While ((getline < “data” ) > 0) –列印檔案data的所有行
從輸入中讀取下一行並賦給變數(行資料沒有分解成欄位,因此NF不起作用)
Begin { printf “Enter your name:” getline name < “-“ print name}
從管道讀取輸入(將結果賦給$0)
[oracle@ ~]$ more user.awk --檢視當前user的shell設定
BEGIN {
"who am i" | getline
name = $1
FS = ":"
}
name ~ $1 {print $7}
[oracle@ ~]$ awk -f user.awk /etc/passwd
/bin/bash
Close()
關閉開啟的檔案和管道
System()
返回被執行命令的退出狀態,0為成功
[oracle@ ~]$ cat test2
first:second
one:two
[oracle@ ~]$ awk 'BEGIN { if(system("rm test2") == 0) print "test2 is dropped"}'
test2 is dropped
[oracle@ ~]$ ls test2
ls: test2: No such file or directory
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/15480802/viewspace-765617/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- shell知識點小結1
- 小知識點1
- 【JAVA】- 知識點小結Java
- promise知識點小結Promise
- HTTP知識點小結HTTP
- makefile 知識點小結
- c語言常用小知識點總結1C語言
- node知識點小結(一)
- shell知識點小結2
- 雜湊表知識點小結
- 總結的小知識點(一)
- oracle事務知識點小結Oracle
- Oracle_day1(小知識點)Oracle
- 前端知識點小結--node、express、mongodb前端ExpressMongoDB
- java小知識點Java
- js小知識點JS
- 前端小知識點前端
- mongo 小知識點Go
- javascript小知識點JavaScript
- PHP小知識點PHP
- 2021/06/02知識點小結
- 微信小程式開發知識點總結微信小程式
- java基礎語法知識小結(1)Java
- 浮點數小知識點
- Flex知識小結Flex
- 小知識總結
- Silverlight 常用小知識點總結
- CSS小知識點一CSS
- ElasticSearch知識點小記Elasticsearch
- VEEAM的小知識點
- linux知識知識點總結Linux
- 知識點總結
- 看似好像沒用的小知識點 vol.1
- oracle小知識點1--varchar2的長度Oracle
- web前端應該總結的知識點(1)Web前端
- E1線路知識點總結(轉)
- Vue重要知識小結Vue
- 硬碟知識小總結硬碟