91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

7、awk編程語言

發布時間:2020-07-17 21:00:20 來源:網絡 閱讀:427 作者:yht_1990 欄目:開發技術

awk 獨立的編程語言 (變量 內置變量 流程控制 函數 數組)

在寫腳本時使用awk獲取數據給程序處理

awk獨立使用時,主要用來對數據做統計



命令格式

awk [選項] '處理動作' 文件列表 (多個文件之間用空格間隔)


命令 | awk [選項] '處理動作'



awk處理數據方式:

以行為處理單位;對數據進行逐行處理

處理完當前行 把當前行的處理結果輸出后自動對一行進行處理 

直到處理完文件中所有行為止


默認是逐行讀入數據,逐行處理數據。要想讓awk只處理指定的行。加條件

只有當前行與條件匹配才執行處理動作,反之則不處理



awk [選項]  '條件{處理動作}' 文件列表


條件的表示方式:

1/正則表達式/

2數值比較

3字符比較

4邏輯比較

選項

-F 指定分割域時的分割符號。默認分割符號是空格和tab健



awk 內置變量

$0 保存awk當前讀放行的內容

FILENAME 保存awk當前處理文件的文件名

NR  保存awk當前處理的行數

FNR 保存awk當前處理的行在文件中的行數

NF 存放用指定分割符號分割后,當前行,列(域)的個數

$1...$n 表示是用指定的分割符 分割數據后的域

$1 變量第1列 $2 第2列

FS 保存字段分割符號 默認值空格和tab健 (FS=

ENVIRON["系統環境"] (數組類型)調用系統環境變量的值

echo $USER $HOSTNAME

awk '{print ENVIRON["HOSTNAME"]},ENVIRON["USER"]}' a.txt


ENVIRON[“系統環境變量”] 讓awk調用系統環境變量

-v 讓awk使用shell自定義變量


#name=jim

#awk -v mz=$name '{print mz}' a.txt



把awk當前系統已有的用戶名輸出屏幕上  /etc/passwd

awk -F":" '{print NR,$1,$6}' /etc/passwd | head -3


用戶名        家目錄

root/root 

bin/bin

daemon /sbin

共處理 3 行

awk 'BEGIN{FS=":";print "行號\t用戶名\t家目錄"}{print NR"\t",$1"\t",$6}END{print "共處理了"NR"行"}' /etc/passwd


awk處理數據順序

BEGIN{ }行前處理:   沒讀入行之前執行的動作

      初始化操作都寫在BEGIN{}里


{ }       行處理:     讀入行時執行的動作

      對讀放的行做處理


END{  } 行后處理:   行讀完之后執行的動作

      做總結性輸出操作寫在END{}里


每一個處理都可以單獨使用,也可以重復使用,也可以一起使用


head -8 /etc/passwd | awk 'BEGIN{print NR}{PRINT NR}END{print NR}'



條件的表示方式:

1、/正則表達式/

awk ‘/正則表達式/{處理動作}' 文件名

awk '/root/{print NR,$0}'/etc/passwd

awk '/[0-9]/{print $0}' /etc/passwd



~不匹配

!~不匹配

awk -F":" '$1~/a/{print $1,$3}' /etc/passwd

awk -F":" '$1!~/a/{print $1,$3}' /etc/passwd


2、數值比較 == != > >= < <= 

awk -F":" '$3==0{print $1,$3}' /etc/passwd

awk -F":" '$3<10{print $1,$3}' /etc/passwd


3、字符比較 ==  !=

awk -F":" '$1!="bin"{print $0}' /etc/passwd

awk -F":" '$1=="root"{print $0}' /etc/passwd


4、邏輯比較(有多個判斷條件時使用) 

&& 邏輯與

|| 邏輯或

! 邏輯非

awk -F":" '$3>=5 && $3<=10{print $1,$3}' /etc/passwd

awk -F":" '$3==5 || $3==7{print $1,$3}' /etc/passwd



awk運算符號(與shell里的運算符方式相同)

+ - * / % 

+= -= *= /=

++ --


awk里變量的定義與調用

變量名=值


調用 變量名


* 也可以不定義直接調用

awk -F":" 'NR<=3{i=$1;print i}' /etc/passwd


統計內建用戶和外建用戶的個數

awk -F":" 'BEGIN{i=0;j=0}$3>=500{i++}$3<=499{j++}END{print 

"inside user "i" 個";print "outside user "j" 個"}' /etc/passwd



awk 流程控制(流程控制的執行過程和shell里流程控制執行過程一樣,只是語法格式變了)


一、分支結構

單分支

if(條件表達式)執行的操作1

if(條件表達式){條件成立時執行的操作1;執行操作2;執行操作N}


雙分支

if(條件表達式){

動作1;動作2;動作N

else{

動作1;動作2;動作N


awk -F":" '{ if($3<=499){i++}else{j++}}END{print i;print j}' /etc/passwd


多分支

if(條件表達式){

     動作1;動作2;動作N

}

else if(條件表達式){

     動作1;動作2;動作N

......

esle{

     動作1;動作2;動作N


awk -F":" 'BEGIN{x=0;y=0;z=0}{if($3<100){x++}else if

($3>=100&&$3<=499){y++}else if($3>=500){z++}else{print "no user"}}

END{print x,y,z}' /etc/passwd


調用awk腳本對文件處理

awk -f xxx.awk /etc/passwd


vim xxx.awk

#!/usr/bin/awk -f

BEGIN{

FS=":"

x=0

y=0

z=0

}


{

if($3<=499){

   x++

}else{

   y++

}


END{

print "內建用戶個數是 "x" 個" 

print "外建用戶個數是 "y" 個"

}


#chmod +x xxx.awk /etc/passwd

./xxx.awk



二、循環結構

for

for(初值;條件表達式:步長){

條件成立時執行的循環體

}


awk "BEGIN{ for(i=1;i<=10;i++){print i}}"


while 先判斷條件再執行循環體

while(條件表達式){

 條件成立時執行循環體


}


awk -F":" '{while( $3<3 ){print $1,$3;}}' /etc/passwd

awk -F":" '{while( $3<3 ){print $1,$3;$3++}' /etc/passwd

awk -F":" '{while( $3<3 ){print $1,$3;$3=5}}' /etc/passwd


do....while 先執行循環體后判斷條件

do{

  循環體

}while(條件表達式)


awk 'BEGIN'{i=10:while(i>20){print i;i++}}'

awk 'BEGIN(i=10;do{print i;i--}while(i>20)}'



awk流程控制語句

對awk里的循環結構做執行控制(只要條件成立就執行循環體)

awk數組


break 結束當前所在的循環體

continue 終止本次循環,開始下一次循環

awk 'BEGIN{for(i=1;i<=10;i++){if(i==4)continue;print i}}'

awk 'BEGIN{for(i=1;i<=10;i++){if(i==4)break;print i}'


對awk做控制(逐行讀入數據,逐行處理數據)

exit

終止awk讀入行


如果有END{}就執行END{}里的動作

如果沒有END{}直接結速處理


awk 'NR==4{exit}{print NR,$0}' a.txt

awk 'NR==4{exit}{print NR,$0}END{print NR}' a.txt


next

讓awk讀取當前行的下一行

awk 'NR==4{next}{print NR,$0}END{print NR}' a.txt



awk數組

定義數組格式:數組名[數字元素下標]=元素值


*數組元素的下標可以使用數字或字符

使用數組元素格式: 數組名[數組元素下標]


輸出數組元素的值:print  數組名[數組元素下標]



awk 'BEGIN'{stuname[0]="jim"stuname[1]="tom";print stuname[0];print stuname[1]}'



awk 'BEGIN{ for{i=0;i<=10;i++}{ num[i]=i;print num[i]} }'

     

awk 'BEGIN{ for(i=0;i<=10;i++){ num[i]=i;print num[2]} }'


awk 'BEGIN{ for(i=0;i<=10;i++){ num[i]=i };print num[2];print num[3] }'



遍歷數組循環結構

for(變量名 in 數組名){print 數組名[變量名]}



for( x in num ){ print x;print num[x]}


awk 'BEGIN{for(i=0;i<=10;i++)num[i]="user"i};for(w in num){print w,num[w]}'




把系統前5個用戶名存儲到數組usergrp里,然后輸出數組usergrp的所有元素

head -5 /etc/passwd | awk -F":" '{print $3,$1}'

head -5 /eetc/passwd | awk -F":" '{print usergrp[$3]=$1}END{for(i in usergrp}{print i,usergrp[i]}}'



統計test.txt 文件里每個命令出現的次數

awk '{comm[$1]++}END{for(x in comm){print x,comm[x]}}' test1.txt | sort -rnk 2


awk '{comm[$1]++}END{for(x in comm){print x,comm[x]}}' ~/.bash_history | sort -rnk 2 | head -10




r 按降序排序

n 按數字排序

k 按第2列排序



ps -e 顯示系統內的所有進程

   -o 指定顯示那列的數據

      comm 可執行文件名

      cmd | 簡單命令

      pcpu cpu的占用率

      pmem 內存使用率

      time 累計的cpu時間

      etime 進程啟動后度過的時間


例子

ps -eo comm,pupu,pmem --sort -pmem | head  按內存使用率降序排序

ps -eo comm,pcpu,pmem --sort +pmem | head  按內存使用率升序排序




ps -e -o comm,pcpu | tail -n +2




自動連接ssh服務器腳本

#!/usr/bin/expect

set login_host 192.168.1.1

set login_user root

set login_password 123456

spawn ssh $login_user@login_host

expect "login_user@login_host's password:"

send "$login_password\r"

expect "#"

send "useradd jim9\r"

expect "#"

send "exit"













向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

锦州市| 江阴市| 泌阳县| 桂东县| 汕尾市| 社旗县| 河曲县| 区。| 青田县| 西青区| 东平县| 临西县| 内乡县| 湛江市| 迁西县| 浙江省| 阿拉尔市| 防城港市| 达日县| 古交市| 池州市| 环江| 建阳市| 温宿县| 唐海县| 吕梁市| 陈巴尔虎旗| 蒙自县| 靖远县| 太康县| 松原市| 公主岭市| 唐山市| 石河子市| 南华县| 慈溪市| 邳州市| 抚州市| 来安县| 木兰县| 洪泽县|