国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 學(xué)院 > 操作系統(tǒng) > 正文

awk基礎(chǔ) [馬哥視頻]

2024-06-28 13:24:43
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友
awk基礎(chǔ) [馬哥視頻]

awk基礎(chǔ)

1.1 PRint

print的使用格式:

print item1,item2, ….

要點(diǎn):

  1. 各項(xiàng)目自己使用逗號(hào)隔開,而輸出時(shí)則以空白字符分隔;

  2. 輸出的item可以為字符串或者數(shù)值,當(dāng)前記錄的字段(如$1)、變量或者awk的表達(dá)式;數(shù)值會(huì)先轉(zhuǎn)換為字符串,而后再輸出;

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

例子:

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

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

內(nèi)置變量:

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

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

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

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

NR:The number of input records,awk命令所處理記錄數(shù):如果有多個(gè)文件,這個(gè)數(shù)目會(huì)把處理的多個(gè)文件中行統(tǒng)一計(jì)數(shù);

NF:Number of Field,當(dāng)前記錄的field個(gè)數(shù);

FNR:與NR不同的是,F(xiàn)NR用于記錄正處理的行是當(dāng)前這一文件中被總共處理的行數(shù);

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

ARGC:awk命令的參數(shù)的個(gè)數(shù);

1.2 printf

print命令的使用格式:

printf format,item1,item2,….

要點(diǎn):

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

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

  3. printf語(yǔ)句不會(huì)自動(dòng)打印換行符;

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

%c:顯示字符的ASCII碼:

%d,%i:十進(jìn)制整數(shù):

%e,%E:科學(xué)計(jì)數(shù)法顯示數(shù)值;

%f:顯示浮點(diǎn)數(shù);

%g,%G:以科學(xué)計(jì)數(shù)法的格式或浮點(diǎn)數(shù)的格式顯示數(shù)值;

%s:顯示字符串

%u:無(wú)符號(hào)整數(shù)

%%:顯示%自身

修飾符:

N:顯示寬度;

-:做對(duì)齊

+:顯示數(shù)值符號(hào)

例子:

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

1.3輸出重定向

printitems > output-file

printitems >> output-file

特殊文件描述符:

/dev/stdin:標(biāo)準(zhǔn)輸入

/dev/stdout:標(biāo)準(zhǔn)輸出

/dev/stderr:錯(cuò)誤輸出

/dev/df/N:某特定文件描述符,如/dev/stdin就相當(dāng)于/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、算術(shù)操作符:

-x:負(fù)值

+x:轉(zhuǎn)換為數(shù)值

x^y:

x**y:次方

x*y:

x+y:

x-y:

x%y:

2、字符串操作符:

只有一個(gè),而且不用寫出來(lái),用于實(shí)現(xiàn)字符串連接:

3、賦值操作符:

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

++、--

需要注意的是,如果某模式為=號(hào),此時(shí)使用/=/可能會(huì)有語(yǔ)法錯(cuò)誤,應(yīng)該為/[=]/代替

4、布爾值

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

5、比較操作符:

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

6、表達(dá)式間的邏輯關(guān)系:

&&、||

7、條件表達(dá)式

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

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

8、行數(shù)調(diào)用

function_name(para1,para2)

9、awk的模式:

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

其中的program為:

pattern{ action }

pattern{ action }

….

常見的模式類型:

  1. Regexp:正則表達(dá)式,格式為/regularexpression/

  2. expression:表達(dá)式,其中值非0或?yàn)榭兆址麜r(shí)滿足條件,如:$1~/foo/ 或 $1==”magedu”,用運(yùn)算符~(匹配)和~!(不匹配)

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

  4. BEGIN/END:特殊模式,僅在awk命令執(zhí)行前運(yùn)行一次或結(jié)束前運(yùn)行一次

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

常見的Action有:

  1. Expressions

  2. Controlstatements

  3. Compoundstatements

  4. Inputstatements

  5. Outputstatements

/正則表達(dá)式/:使用通配符的擴(kuò)展集

關(guān)系表達(dá)式:可以用下面運(yùn)算符表中的關(guān)系符進(jìn)行操作,可以是字符串或者數(shù)值的比較多,如$2> $1 選擇第二個(gè)字段比第一個(gè)字段長(zhǎng)的行。

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

模式匹配表達(dá)式:

模式,模式:指定一個(gè)行的范圍,該語(yǔ)法不能包括BEGIN和END模式

BEGIN:讓用戶指定在第一條輸入記錄被處理之前說(shuō)發(fā)生的動(dòng)作,通常可在這里設(shè)置全局變量。

END:讓用戶在最后一條輸入記錄被讀取之后發(fā)生的動(dòng)作

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

控制語(yǔ)句

  1. if-else

語(yǔ)法: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

語(yǔ)法: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

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

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

  1. for

語(yǔ)法: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循環(huán)還可以用來(lái)遍歷數(shù)組元素:

語(yǔ)法: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

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

  1. break和continue

常用于循環(huán)或case語(yǔ)句中

  1. next

提前結(jié)束對(duì)本行文本的處理,并接著處理下一行

awk內(nèi)置變量:

FS:field separator,默認(rèn)是空白字符;

RS:Recordseparator,默認(rèn)是換行字符;

NR:Thenumber of input records,awk命令所處理記錄數(shù):如果有多個(gè)文件,這個(gè)數(shù)目會(huì)把處理的多個(gè)文件中行統(tǒng)一計(jì)數(shù);

NF:Numberof Field,當(dāng)前記錄的field個(gè)數(shù);

FNR:與NR不同的是,F(xiàn)NR用于記錄正處理的行是當(dāng)前這一文件中被總共處理的行數(shù);

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

ARGC:awk命令的參數(shù)的個(gè)數(shù);

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中使用數(shù)組

array[index-expression]

index-expression可以使用任意字符串,需要注意的是,如果某數(shù)據(jù)組元素事項(xiàng)不存在,那么在應(yīng)用其時(shí),awk會(huì)自動(dòng)創(chuàng)建此元素并初始化為空串;因此,要判斷某數(shù)據(jù)組中是否存在某元素,需要使用indexin array的方式。

要遍歷數(shù)組中的每一個(gè)元素,需要使用如下的特殊結(jié)構(gòu):

for(var in array) {statement1,…}

其中,var用于引用數(shù)組下標(biāo)。

例子:

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

每出現(xiàn)一被/^tcp/模式匹配到的行,數(shù)組S[$NF]就加一,NF為當(dāng)前匹配的行的最后一個(gè)字段,此處用其值作為數(shù)組S的元素索引;

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

用法與上一個(gè)例子相同,用于統(tǒng)計(jì)日志文件中IP地址的訪問(wèn)量

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

awk的內(nèi)置函數(shù)

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

功能:將string表示的字符串以filedsep為分隔符進(jìn)行分割,并將分隔后的結(jié)果保存至array為名的數(shù)組中

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

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

length([string])

功能:返回string字符串中字符的個(gè)數(shù)

substr(string ,start[, length])

功能:取string字符串中的子串,從start開始,取length個(gè),start從1開始計(jì)數(shù);

system(command)

功能:執(zhí)行系統(tǒng)command并將結(jié)果訪問(wèn)至awk命令

systime()

功能:取系統(tǒng)當(dāng)前時(shí)間

awk[options] ‘PATTERN{cation}’ input_file


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 长宁县| 本溪市| 卫辉市| 临海市| 江西省| 黄骅市| 义马市| 香港 | 河南省| 册亨县| 崇礼县| 云南省| 绵竹市| 正宁县| 神木县| 阿克苏市| 林西县| 新竹县| 丽水市| 伊金霍洛旗| 屏南县| 浪卡子县| 浠水县| 太仆寺旗| 水富县| 达孜县| 鄄城县| 奉节县| 皋兰县| 五峰| 克山县| 神农架林区| 界首市| 独山县| 竹山县| 苏尼特左旗| 康定县| 霸州市| 旌德县| 延安市| 利辛县|