亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 操作系統 > 正文

awk基礎 [馬哥視頻]

2024-06-28 13:24:43
字體:
來源:轉載
供稿:網友
awk基礎 [馬哥視頻]

awk基礎

1.1 PRint

print的使用格式:

print item1,item2, ….

要點:

  1. 各項目自己使用逗號隔開,而輸出時則以空白字符分隔;

  2. 輸出的item可以為字符串或者數值,當前記錄的字段(如$1)、變量或者awk的表達式;數值會先轉換為字符串,而后再輸出;

  3. print的命令后面的item可以省略,此時其功能相當于print $0,因此,如果想輸出空白行,則需要使用print “”;

例子:

# awk ‘BEGIN {print “line one/nline two/nline three”}’

awk –F: ‘{print $1,$2}’ /etc/passwd

內置變量:

ORS(output record sepatator) (輸出換行符)

OFS(output field separator)  (輸出分隔符)

FS: field separator,默認是空白字符;(輸入文件分隔符)

RS:Record separator,默認是換行字符;(輸入文件換行符)

NR:The number of input records,awk命令所處理記錄數:如果有多個文件,這個數目會把處理的多個文件中行統一計數;

NF:Number of Field,當前記錄的field個數;

FNR:與NR不同的是,FNR用于記錄正處理的行是當前這一文件中被總共處理的行數;

ARGV:數組,保存命令行本身這個字符串,如awk’{print $0}’ a.txt b.txt這個命令中,ARGV[0]保存awk,ARGV[1]保存a.txt;

ARGC:awk命令的參數的個數;

1.2 printf

print命令的使用格式:

printf format,item1,item2,….

要點:

  1. 與其print命令的最大不同是,printf需要指定format;

  2. format用于指定后面的每個item的輸出格式;

  3. printf語句不會自動打印換行符;

format格式的指示符都以%開頭,后跟一個字符;如下:

%c:顯示字符的ASCII碼:

%d,%i:十進制整數:

%e,%E:科學計數法顯示數值;

%f:顯示浮點數;

%g,%G:以科學計數法的格式或浮點數的格式顯示數值;

%s:顯示字符串

%u:無符號整數

%%:顯示%自身

修飾符:

N:顯示寬度;

-:做對齊

+:顯示數值符號

例子:

#awk–F: ‘{printf “%-15s %/n”,$1,$3 }’ /ect/passwd

1.3輸出重定向

printitems > output-file

printitems >> output-file

特殊文件描述符:

/dev/stdin:標準輸入

/dev/stdout:標準輸出

/dev/stderr:錯誤輸出

/dev/df/N:某特定文件描述符,如/dev/stdin就相當于/dev/fd/0;

例子

awk–F: ‘{printf “%-15s %i/n”,$1,$3 > “/dev/stderr”}’/etc/passwd

1.4 awk

awk的使用格式:

awk[options] ‘script’ file1,file2,….

awk[options] ‘PATTERN {action}’ file1,file2, ….

-F:

1、算術操作符:

-x:負值

+x:轉換為數值

x^y:

x**y:次方

x*y:

x+y:

x-y:

x%y:

2、字符串操作符:

只有一個,而且不用寫出來,用于實現字符串連接:

3、賦值操作符:

=、+=、-=、*=、/=、%=、^=、**=

++、--

需要注意的是,如果某模式為=號,此時使用/=/可能會有語法錯誤,應該為/[=]/代替

4、布爾值

awk中,任何非0值或非空字符串都為真,反之就為假;

5、比較操作符:

x< y 、x<=y、 x> y、 x>= y、 x== y、x!= y、x~ y、x!~ y

6、表達式間的邏輯關系:

&&、||

7、條件表達式

selector?if-true-exp:if-false-exp

$A> $B ? echo $A:echo $B

8、行數調用

function_name(para1,para2)

9、awk的模式:

awk‘program’ input-file1 input-file2 ….

其中的program為:

pattern{ action }

pattern{ action }

….

常見的模式類型:

  1. Regexp:正則表達式,格式為/regularexpression/

  2. expression:表達式,其中值非0或為空字符時滿足條件,如:$1~/foo/ 或 $1==”magedu”,用運算符~(匹配)和~!(不匹配)

  3. Ranges:指定的匹配范圍,格式為pat1,pat2

  4. BEGIN/END:特殊模式,僅在awk命令執行前運行一次或結束前運行一次

  5. Empty(空模式):匹配任意輸入行;

常見的Action有:

  1. Expressions

  2. Controlstatements

  3. Compoundstatements

  4. Inputstatements

  5. Outputstatements

/正則表達式/:使用通配符的擴展集

關系表達式:可以用下面運算符表中的關系符進行操作,可以是字符串或者數值的比較多,如$2> $1 選擇第二個字段比第一個字段長的行。

awk–F: ‘$3 >= 500 {print $1}’ /ect/passwd

awk–F: ‘$3 >= 500 {print $1,$3}’ /ect/passwd

awk–F: ‘$3 >= 500 {printf “%-15s%s/n”,$1,$3}’ /ect/passwd

awk–F: ‘$3 >= 500 {print “Username UID”;printf“%-15s%s”,$1,$3}’ /ect/passwd

模式匹配表達式:

模式,模式:指定一個行的范圍,該語法不能包括BEGIN和END模式

BEGIN:讓用戶指定在第一條輸入記錄被處理之前說發生的動作,通??稍谶@里設置全局變量。

END:讓用戶在最后一條輸入記錄被讀取之后發生的動作

awk–F: ‘BEGIN {print “Username UID”}{printf “%-15s%s”,$1,$3}’/ect/passwd

awk–F: ‘BEGIN {print “Username UID”}{printf“%-15s%s”,$1,$3}END{print “Over}’ /ect/passwd

awk‘BEGIN {print “a” “b”}’

awk–v FS=: ‘{print $1}’ /etc/passwd

awk‘BEGIN{FS=”:”}{print $1}’ /ect/passwd

例子:

vima.txt

welcometo redhat linux.

howare you?

awk‘{print $1}’ a.txt

df–h

df–h |awk ‘{print $1}’

df–hP |awk ‘{print $1}’

awk‘{print $1}’ /etc/passwd

awk–F: ‘{print $1}’ /etc/passwd

awk–F: ‘{print $1,$7}’ /etc/passwd

awk–F: ‘{print $NF}’ /etc/passwd

awk‘{print $NF}’ a.txt

awk–v FS=: ‘{print $NF}’ /etc/passwd

awk‘{print $1 $2}’ a.txt

awk‘{print $1,$2}’ a.txt

awk-v OFS=: ’{print $1,$2}’ a.txt

awk‘{printf “%-10s,%s/n”,$1,$2}’ a.txt

awk‘{printf “%-10s%s/n”,$1,$2}’ a.txt

awk‘BEGIN{print “a” “b”}’

awk–F: ‘$1 ~ /^root/{print $3,$4,$NF}’ /ect/passwd

awk–F: ‘$1 !~ /^root/{print $3,$4,$NF}’ /ect/passwd

awk–F: ‘/bash/{print $0}’ /etc/passwd

awk–F: ‘/bash/{print $1}’ /etc/passwd

控制語句

  1. if-else

語法:if(condition)(then-body) else{[ else-body]}

例子:

awk–F: ‘{if ($1==”root”) print $1, “admin”;else print$1,”Common User”}’ /ect/passwd

awk–F: ‘{if($1==”root”) printf “%-15s:%s/n”,$1,”Admin”;elseprintf “%-15s:%s/n”,$1, “Common User”}’ /ect/passwd

awk–F: -v sum=0 ‘{if ($3 >= 500) sum ++}END {print sum}’/ect/passwd

  1. while

語法:while(condition) {statements1;statements2;……}

awk–F: ‘{i=1;while (I <= 3) {print $1;i++}}’ /ect/passwd

awk–F: ‘ $1!~/root/ {i=1;while (i <= 4) {print $1;i++}}’/ect/passwd

awk–F: ‘ $1!~/root/ {i=1;while (i <= NF) {print $1;i+=2}}’/ect/passwd

awk–F: ‘ $1!~/root/ {i=2;while (i <= NF) {print $1;i+=2}}’/ect/passwd

  1. do-while

語法: do{statements1;statements2;……} while (condition)

awk–F: ‘{i=1; do {print $i;i++} while (i <=3) }’ /etc/passwd

  1. for

語法:for(variable assignment;condition; iteration process ) {statements1;statements2;…}

awk–F: ‘{for (i=1;i<=3;i++) print $1}’ /ect/passwd

awk–F: ‘{for (i=1;i<=NF;i+=2) print $i}’ /ect/passwd

for循環還可以用來遍歷數組元素:

語法:for(i in array ) {statements1;statements2;……}

awk–F: ‘$NF!~/^$/{BASH[$NF]++}END{for (A in BASH) {printf“%15s:%i/n”,A,BASH[A]}}’ /ect/passwd

  1. case

語法:seitch(expression) {case VALUE or /ERGEXP/:statements1;statements2;…default statements0 }

  1. break和continue

常用于循環或case語句中

  1. next

提前結束對本行文本的處理,并接著處理下一行

awk內置變量:

FS:field separator,默認是空白字符;

RS:Recordseparator,默認是換行字符;

NR:Thenumber of input records,awk命令所處理記錄數:如果有多個文件,這個數目會把處理的多個文件中行統一計數;

NF:Numberof Field,當前記錄的field個數;

FNR:與NR不同的是,FNR用于記錄正處理的行是當前這一文件中被總共處理的行數;

ARGV:數組,保存命令行本身這個字符串,如awk’{print$0}’ a.txt b.txt這個命令中,ARGV[0]保存awk,ARGV[1]保存a.txt;

ARGC:awk命令的參數的個數;

forI in {0 .. 10}

printA[$i]

for(A in ARRAY) {print ARRAY[A]}

awk‘BEGIN {A[“m”]=”hello”;A[“n”]=”world”;for (B in A)print A[B]}’

awk中使用數組

array[index-expression]

index-expression可以使用任意字符串,需要注意的是,如果某數據組元素事項不存在,那么在應用其時,awk會自動創建此元素并初始化為空串;因此,要判斷某數據組中是否存在某元素,需要使用indexin array的方式。

要遍歷數組中的每一個元素,需要使用如下的特殊結構:

for(var in array) {statement1,…}

其中,var用于引用數組下標。

例子:

netstat–n|awk ‘/^tcp/ {++S[$NF]} END {for (a in S) print a,S[a]}’

netstat–ant |grep “LISTEN” |wc –l

netstat–ant | awk ‘$1 ~/tcp/{S[$NF]++}END{for (A in S) print A,S[A]}’

netstat–ant | awk ‘$1 ~/tcp/{S[$NF]++}END{for (A in S) printf“%10s:%s/n”, A,S[A]}’

awk–F: ‘$NF!~/^$/ {SHELL[$NF]++}END{for (A in SHELL) printA,SHELL[A]}’ /etc/passwd

awk‘{IP [$1]++}END{for (A in IP) print A,IP[A]}’/usr/local/apach/logs/access_log

每出現一被/^tcp/模式匹配到的行,數組S[$NF]就加一,NF為當前匹配的行的最后一個字段,此處用其值作為數組S的元素索引;

awk‘{count[$1]++};END {for (url in counts) print counts[url],url}’/var/log/httpd/access_log

用法與上一個例子相同,用于統計日志文件中IP地址的訪問量

awk‘BEGIN{A[x]=”hello”;A[y]=”world”;print A[x],A[y]}’

awk的內置函數

split(string, array [,fieldsep [,seps]])

功能:將string表示的字符串以filedsep為分隔符進行分割,并將分隔后的結果保存至array為名的數組中

netstat–ant | awk ‘/:80/ {split($5,clients,”:”);IP[client[1]]++}END{for (i in IP) {print IP[i],i}}’|sort –rn |head -50

將netstat查詢結果的第五列開始以:為分隔符開始切割,切割的結果保存在client數組中,并累計。

length([string])

功能:返回string字符串中字符的個數

substr(string ,start[, length])

功能:取string字符串中的子串,從start開始,取length個,start從1開始計數;

system(command)

功能:執行系統command并將結果訪問至awk命令

systime()

功能:取系統當前時間

awk[options] ‘PATTERN{cation}’ input_file


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲视频在线播放| 久久精品国产99国产精品澳门| 日韩精品极品视频免费观看| 国产精品爽爽爽爽爽爽在线观看| 在线成人激情黄色| 亚洲欧美中文在线视频| 欧美三级xxx| www.亚洲天堂| 亚洲xxxx妇黄裸体| 亚洲xxxx在线| 中文字幕精品在线| 中文字幕亚洲一区二区三区五十路| 三级精品视频久久久久| 国产精品久久久久久久久影视| 亚洲乱码国产乱码精品精| 狠狠色狠狠色综合日日小说| 国产日本欧美在线观看| 亚洲大胆人体av| 欧美巨大黑人极品精男| 国产精品日韩在线观看| 亚洲一区国产精品| 欧美激情一级精品国产| 亚洲最新中文字幕| 国产精品久久国产精品99gif| 高潮白浆女日韩av免费看| 亚洲欧美中文字幕在线一区| xvideos亚洲人网站| 欧美激情中文字幕在线| 26uuu另类亚洲欧美日本一| 久久久久久高潮国产精品视| 久久99精品久久久久久青青91| 国产精品久久精品| 深夜成人在线观看| 欧美做受高潮电影o| 日韩国产一区三区| 亚洲精品一区二区三区婷婷月| 69av在线播放| 日韩av日韩在线观看| 国产亚洲欧洲高清| 欧美日韩中文在线观看| 欧美色道久久88综合亚洲精品| 欧美激情伊人电影| 精品成人69xx.xyz| 欧美日本亚洲视频| 亚洲精品白浆高清久久久久久| 亚洲va电影大全| 97视频免费在线观看| 亚洲春色另类小说| 亚洲国产成人精品电影| 亚洲老司机av| 久久久电影免费观看完整版| 欧洲日本亚洲国产区| 亚洲第一级黄色片| 欧美日韩不卡合集视频| 亚洲精品国偷自产在线99热| 成人黄色免费网站在线观看| 亚洲一区二区三区视频| 日韩免费在线播放| 亚洲欧美日本另类| 亚洲欧美日本伦理| 欧美精品激情在线观看| 日韩av日韩在线观看| 亚洲精品久久久久中文字幕二区| 91精品在线播放| 欧美一区二区三区……| 欧美日韩在线视频一区| 日韩hd视频在线观看| 中文字幕久久久av一区| 日韩精品极品在线观看| 亚洲视频视频在线| 亚洲网站在线播放| 欧美黑人巨大精品一区二区| 亚洲欧美制服另类日韩| 国产丝袜一区二区| 久久综合88中文色鬼| 国产精品偷伦一区二区| 国产精品永久在线| 国产精品第3页| 91精品综合视频| 久久久免费高清电视剧观看| 国产精品自产拍在线观看| 不卡伊人av在线播放| 91精品啪aⅴ在线观看国产| 91干在线观看| 国产一区二区欧美日韩| 91免费观看网站| 亚洲国产欧美日韩精品| 黑人极品videos精品欧美裸| 久久久精品在线| 亚洲在线www| 成人在线播放av| 久久久成人精品| 精品久久久一区| 国产欧美日韩精品丝袜高跟鞋| 日韩成人在线播放| 欧美日韩国产一区二区| 精品magnet| 美日韩精品免费观看视频| 热门国产精品亚洲第一区在线| 97不卡在线视频| 97人洗澡人人免费公开视频碰碰碰| 国产精品999| 日韩福利伦理影院免费| 亚洲黄在线观看| 亚洲乱码av中文一区二区| 懂色av中文一区二区三区天美| 国产情人节一区| 中文字幕在线国产精品| 国产视频精品xxxx| 久久久综合av| 久久久av电影| 国产成人免费91av在线| 欧美日韩在线另类| 国产精品久久久久91| 久久精品中文字幕免费mv| 国产不卡av在线| 91chinesevideo永久地址| 亚洲精品福利视频| 欧美日韩高清在线观看| 人人做人人澡人人爽欧美| 亚洲国产精品小视频| 日本精品中文字幕| 日韩电影大全免费观看2023年上| 国产女人18毛片水18精品| 日韩在线不卡视频| 欧美日韩国产一区在线| 成人激情视频小说免费下载| 国产一区二区三区视频免费| 青青在线视频一区二区三区| 亚洲国产精久久久久久久| 一个人看的www欧美| 疯狂做受xxxx高潮欧美日本| 国产欧美一区二区三区视频| 欧美激情视频在线观看| 久久亚洲精品小早川怜子66| 欧美一区二区三区四区在线| 亚洲精品xxx| 91欧美激情另类亚洲| 午夜精品一区二区三区在线播放| 国产精品视频xxx| 俺也去精品视频在线观看| 国产精品美女网站| 欧美精品videosex牲欧美| 福利微拍一区二区| 久久夜色精品国产亚洲aⅴ| 九色精品美女在线| 久久婷婷国产麻豆91天堂| 国内精品中文字幕| 亚洲国产小视频在线观看| 日韩美女免费观看| 欧美一区二区三区……| 成人免费大片黄在线播放| 欧美日韩第一视频| 国产一区二区丝袜| 国产精品白嫩美女在线观看| 一区二区av在线| 中文字幕日韩精品在线观看| 68精品国产免费久久久久久婷婷| 2019日本中文字幕| 色琪琪综合男人的天堂aⅴ视频| 亚洲成人亚洲激情| 亚洲精品在线观看www| 在线看日韩欧美| 中文字幕日韩在线观看|