awk是一種處理文字檔案的語言,是乙個強大的文字分析工具。
舉例:1.所在路徑
[root@centos7 ~]#ll `which awk`
lrwxrwxrwx. 1 root root 4 may 10 13:05 /usr/bin/awk -> gawk
2.基本用法
awk '' /etc/fstab -- $1指的是第幾列。
舉例:awk ''
3.可以由3部分組成
beginend --begin和end決定了各自的語句在第幾行。
舉例: [root@centos7 data]#awk 'beginend' fstab
number
200200
200200
the end
4. -f "分隔符" $0整行,$1第一列
awk -f ":" '' passwd
5.1 fs:輸入字段分隔符,預設為空白字元
(1)基本用法 awk -v fs=':' '』 /etc/passwd
方便之處在於如果之前定義好了變數可以直接呼叫
[root@centos7 data]#fs=":"
[root@centos7 data]#awk -v fs=$fs '' passwd
(2)指定範圍 第一種 df|awk -f ' +|%' '
第二種 awk -f "[ |\" '' access_log
awk -f "[ " '' access_log
5.2 ofs:輸出字段分隔符,預設為空白字元
awk -f "[ " -v ofs="--" '' access_log |head -10
172.18.118.91--20/may/2018:08:09:59
172.18.118.91--20/may/2018:08:09:59
5.3 rs :輸入記錄分隔符,指定輸入時的換行符
awk -v rs=' ' 『』 /etc/passwd
[root@centos7 data]#cat awktest
a,b,c
d;e,f
gg;hh;xx
asd預設把';'分割看作一行
[root@centos7 data]#awk -f "," -v rs=';' '' awktest
a ehh xx
asd5.4 ors:輸出記錄分隔符,輸出時用指定符號代替換行符
awk -v rs=' ' -v ors='###'『』 /etc/passwd
[root@centos7 data]#awk -f "," -v ors='-----' '' awktest
a b-----d;e f-----gg;hh;xx -----asd -----
5.5 nf:字段數量
awk -f:'' /etc/fstab 引用變數時,變數前不需加$
awk -f:'' /etc/passwd
awk -f":" '' passwd 取最後一行
5.6 nr:記錄號
awk 『』 /etc/fstab ; awk end『』 /etc/fstab
awk '' passwd 加行號
5.7 fnr:各檔案分別計數,記錄號
awk '' /etc/fstab /etc/inittab --這樣會對每個檔案從頭編號
passwd 1 libstoragemgmt
passwd 2 colord
passwd 3 rpc
passwd 4 gluster
fstab 1 /dev/sda1 /boot xfs defaults 0 0
fstab 2 /dev/sda2 / xfs defaults 0 0
5.8 filename:當前檔名
awk '』 /etc/fstab
awk -f":" '' passwd fstab
5.9 argc:命令列引數的個數
awk '』 /etc/fstab /etc/inittab
awk 『begin 』 /etc/fstab /etc/inittab
5.10 ar**:陣列,儲存的是命令列所給定的各引數
awk 『begin 』 /etc/fstab /etc/inittab
awk 『begin 』 /etc/fstab /etc/inittab
5.11 自定義變數(區分字元大小寫)
(1) -v var=value
(2) 在program中直接定義
[root@centos7 data]#awk -v name='magedu' 'begin'
magedu
可以直接呼叫檔案
[root@centos7 data]#echo '' > f1.awk
[root@centos7 data]#awk -f: -f f1.awk passwd fstab
root 0
bin 1
daemon 2
adm 3
lp 4
6 printf
printf 格式 $1,$2
%c:顯示字元的ascii碼
%d, %i:顯示十進位制整數
%e, %e:顯示科學計數法數值
%f:顯示為浮點數
%g, %g:以科學計數法或浮點形式顯示數值
%s:顯示字串
%u:無符號整數
%%:顯示%自身
#[.#] 第乙個數字控制顯示的寬度;第二個#表示小數點後精度,%3.1f
- 左對齊(預設右對齊) %-15s
+ 顯示數值的正負符號 %+d
echo "aaa:123.456"|awk -f: ''
[root@centos7 data]#awk -v name='magedu' 'begin'
magedu
列印**
awk -f: 'begin' passwd
支援運算
x+y, x-y, x*y, x/y, x^y, x%y
- x:轉換為負數
+x:將字串轉換為數值
賦值 =, +=, -=, *=, /=, %=, ^=,++, --
比較操作符:
==, !=, >, >=, <, <=
awk -f: '$3==996''' passwd --中間不許有空格。
模式匹配符:
~:左邊是否和右邊匹配,包含
!~:是否不匹配
awk -f: '$1 ~ "rpc"''' passwd
awk -f: '! ($1 ~ "rpc")''' passwd
邏輯操作符:與&&,或||,非!
#awk -f: '! ($1 ~ "rpc")&& $3 <100''' passwd
條件表示式(三目表示式)
selector?if-true-expression:if-false-expression
awk -f: '$3<=100?line="less":line="more" ' passwd
支援正規表示式
awk -f: '/mail/' passwd --找出mail的行
continue;break
跳過5:awk 'begin}'
到5直接跳出 awk 'begin}'
陣列 awk 'begin'
99.例項
取訪問最多的ip
awk '' access_log |sort |uniq -c|sort -nr|head -3
取基數seq 10 |awk 'i=!i'
取偶數seq 10 |awk '!(i=!i)'
取ipifconfig ens33|awk '/netmask/'
取3-7行
seq 10|awk 'nr >2 && nr < 8'
取指定範圍的行
awk -f: '/ftp/,/rpc/' passwd
取大於10的行
df|awk -f ' +|%' '/\/dev\/sd/'
while練習
awk '/linux16/}' /boot/grub2/grub.cfg
100之內數相加
awk 'begin;print sum}'
列印ip出現的次數 ip[$1]++ 以第一列為下標 一般查詢出現最多的ip
awk 'end}' access_log
取最大值和最小值
cat num.txt |awk -f"," '}end'
取平均數
m 10
v 13
v 10
m 20
awk 'else}end' num2
顯示長度為4的字元
awk ''
顯示空白字元開始的行
awk '/^[ ]/' test2
計算乙個目錄下的檔案大小總和
python練習第19天
二叉樹的最大深度 給定乙個二叉樹,找出其最大深度。二叉樹的深度為根節點到最遠葉子節點的最長路徑上的節點數。說明 葉子節點是指沒有子節點的節點。示例 給定二叉樹 3,9,20,null,null,15,7 這個就是通過遞迴 class solution def maxdepth self,root t...
第44月第19天 SDK license
1.需要提供的引數 ios 應用bundleid android 包名和簽名資訊 md5 格式小寫無冒號 2.預燒錄預登記動態註冊預燒錄,指的是,我們後台預先生成授權的license檔案,然後預先寫入硬體裝置的儲存檔案中。在裝置首次啟動的時候,就直接調取license檔案進行啟用。這種方式適用於需要...
學習iOS開發的第19天
學了一下手勢識別器的運用。下面簡單地演示一下。手勢包括輕擊 捏合 平移 輕掃 旋轉 長按等。它們分別由相應類來實現。依次為uitapgesturerecognizer uipinchgesturerecognizer uipangesturerecognizer uiswipegesturereco...