命令語法:awk『條件1條件2...』檔名
命令條件:
一般使用關係表示式作為條件
x > 10 判斷變數x是否大於10
x >= 10 判斷變數是否大於等於10
x <= 10 判斷變數是否小於等於10
命令動作:
格式化輸出 (,表示輸出第n列;$n表示第n列)
流程控制語句
命令作用:awk是乙個複雜的命令,可以在裡面進行程式設計等複雜的操作。
示例:
[root@192 cut]# cat score.txt
id name gender score
1 zhangsan m 90
2 lisi m 88
3 wangwu m 98
4 zhaoliu n 97
5 nangongyi m 100
例項:使用awk命令格式輸出第2,4列內容
[root@192 cut]# awk '' score.txt
name score
zhangsan 90
lisi 88
wangwu 98
zhaoliu 97
nangongyi 100
[root@192 cut]#
注意:awk提取列,它是先提取第一行的第2,4列,然後,提取第二行的第2,4列,接著第三行的第2,4列,一直到文字結束。
例項:我要獲取當前系統的根目錄的磁碟空間大小
[root@192 cut]# df -h
檔案系統 容量 已用 可用 已用%% 掛載點
/dev/sda3 17g 2.6g 14g 17% /
tmpfs 499m 0 499m 0% /dev/shm
/dev/sda1 985m 40m 896m 5% /boot
a、先提取df -h 命令輸出的第一行
[root@192 cut]# df -h | grep sda3
/dev/sda3 17g 2.6g 14g 17% /
[root@192 cut]#
b、再提取a結果的第五列
[root@192 cut]# df -h | grep sda3 | awk ''
17%[root@192 cut]#
c、以」%」為分隔符,獲取第乙個元素
[root@192 cut]# df -h | grep sda3 | awk '' | cut -d "%" -f 1
17[root@192 cut]#
begin
作用:是個條件,只有滿足了begin這個條件,才開始執行。表示,在所有輸出之前,輸出begin後的內容。再處理其他動作。
例項:awk 'begin ' score.txt
[root@192 cut]# awk 'begin ' score.txt
this is new begin!
name score
zhangsan 90
lisi 88
wangwu 98
zhaoliu 97
nangongyi 100
[root@192 cut]#
那麼begin的作用到底是在**?往下看:fs內建變數:定義分隔符
作用:指定分隔符
例項:從passwd檔案中獲取所有的非系統使用者- cat /etc/passwd | grep "/bin/bash" | awk ' '
[root@192 cut]# cat /etc/passwd | grep "/bin/bash" | awk ' '
root:x:0:0:root:/root:/bin/bash
user1 500
user2 501
user3 502
[root@192 cut]#
仔細觀察:我們發現,第一行也被輸出出來了。這是為什麼呢?原來,awk是先讀入第一行資料,然後,再執行命令操作。
例項:從passwd檔案中獲取所有的非系統使用者,並去掉第一行- cat /etc/passwd | grep "/bin/bash" | awk 'begin '
[root@192 cut]# cat /etc/passwd | grep "/bin/bash" | awk 'begin '
root 0
user1 500
user2 501
user3 502
[root@192 cut]#
注意:1、awk預設能夠識別的分隔符是「空格」、「製表符」,但是,現實中,我們見到的分隔符,可能不止這幾個,需要我們根據實際情況,進行指定,這時,就用到fs了,它是awk命令中用來指定分隔符的變數。
2、begin表示在讀入第一行資料之前,就先把分隔符寫入操作,然後,再來處理,這樣,第一行資料,就被處理了。手動分割,一般與fs並存。
end
作用:在命令執行完後,輸出end標識的字元內容。
例項:從score.txt檔案,獲取第2,4列,並在最後輸出「the end」- awk 'end ' score.txt
[root@192 cut]# awk 'end ' score.txt
name score
zhangsan 90
lisi 88
wangwu 98
zhaoliu 97
nangongyi 100
the end
[root@192 cut]#
關係運算子
例項:從score.txt檔案中獲取分數100分的使用者
a、過濾掉不用的行 cat score.txt | grep -v name
[root@192 cut]# cat score.txt | grep -v name
1 zhangsan m 90
2 lisi m 88
3 wangwu m 98
4 zhaoliu n 97
5 nangongyi m 100
[root@192 cut]#
b、對第4列運算,結果輸出第2列 cat score.txt | grep -v name | awk '$4>=100 '
[root@192 cut]# cat score.txt | grep -v name | awk '$4>=100 '
nangongyi
[root@192 cut]#
Oracle中統計符合某列條件的列總數
最近在專案報表中需要乙個查詢語句,用來統計符合某一列條件的其它幾列的個數 比如有下面乙個表結構 經過自己試驗,查詢幫助,總算實現了上面的查詢。首先講幾個函式的用法 null 指的是空值,或者非法值。nvl expr1,expr2 引數說明 如果expr1為null,返回expr2 不為null,返回...
linux刪除符合條件的檔案
找到根目錄下所有的以test開頭的檔案並把查詢結果當做引數傳給rm rf命令進行刪除 1 find name test xargs rm rf 2 find name test exec rm rf 3 rm rf find name test 如果想指定遞迴深度,可以這樣 1 find maxde...
linux查詢符合條件的檔案並刪除
找到根目錄下所有的以test開頭的檔案並把查詢結果當做引數傳給rm rf命令進行刪除 1 find name test xargs rm rf 2 find name test exec rm rf 3 rm rf find name test 如果想指定遞迴深度,可以這樣 1 find maxde...