日本搞逼视频_黄色一级片免费在线观看_色99久久_性明星video另类hd_欧美77_综合在线视频

國內(nèi)最全I(xiàn)T社區(qū)平臺(tái) 聯(lián)系我們 | 收藏本站
阿里云優(yōu)惠2
您當(dāng)前位置:首頁 > php開源 > 綜合技術(shù) > awk入門學(xué)習(xí)筆記

awk入門學(xué)習(xí)筆記

來源:程序員人生   發(fā)布時(shí)間:2016-07-13 08:52:48 閱讀次數(shù):2543次

零、awk的介紹
awk是Linux及Unix操作系統(tǒng)中非常優(yōu)秀的數(shù)據(jù)及文本處理工具,它是1種編程語言。
主要用處是自動(dòng)化運(yùn)維和文本處理
1、awk基本語法
1、命令行格式:
awk -F' ' '{print $1}' pets.txt
awk -F '{print $1}' pets.txt(由于默許是空格,所以這類情況和上面的等效,但是我在嘗試的時(shí)候會(huì)報(bào)錯(cuò))
-F后面是指定的分隔符,:或' '

awk 'BEGIN{FS=" "}{print $1}' pets.txt
2、文本格式:
#!/usr/bin/awk
BEGIN{ FS=":"}
{print $1}

2、awk的變量
1、經(jīng)常使用內(nèi)置變量
$0 當(dāng)前所有字段
$1~$n 當(dāng)前第n個(gè)字段
FS 分隔符(默許為空格)
NF 字段個(gè)數(shù)
NR 行號(hào)
RS 輸入記錄的分隔符(默許為空格)

2、RS是指定的換行符,系統(tǒng)默許是\n進(jìn)行換行,但是如果我們不希望使用\n而是使用自定義的換行符來進(jìn)行分行,
那末只需要更改RS參數(shù)的值便可
awk 'BEGIN{RS=" "}{print $0}' pets.txt

3、NF是列數(shù),如果我們需要打印每行依照我們指定的分隔方法有多少列,可以用以下命令調(diào)用
awk -F":" '{print NF}' /etc/passwd----------->輸出若干列7,代表文件中每行中以“:”作為分隔符都有7列。

4、NR是行號(hào),如果我們需要給文件的每行加上1個(gè)固定的行號(hào)格式,例如 "1 : "的情勢,可使用以下語句
awk -F' ' '{print NR" : " $0}' pets.txt

5、調(diào)用外部變量
awk -v host=$HOSTNAME 'BEGIN{print host}'
也能夠自己定義變量名
awk -v host="host" 'BEGIN{print host}'

3、awk的操作符
關(guān)系操作符:<、>、<=、>=、==、!=、~ 、!~
1、依照指定要求匹配內(nèi)容,如果我們需要匹配passwd文件中第7列是以/bin開頭的那些行,可以以下表示
awk -F: '$7 ~ /^\/bin/{print $0}' /etc/passwd
冒號(hào)分隔 ~代表匹配 ^代表字符串起始標(biāo)志,匹配內(nèi)容是/bin(注意后面還要帶1個(gè)/,否則會(huì)報(bào)錯(cuò))
那如果我們需要不匹配/bin開頭的行,只需要將~改成!~便可。
上述代碼也能夠用變量的情勢來替換
awk -F: -v reg='^/bin.*' '$7 ~ reg {print $0}' /etc/passwd
用1個(gè)正則表達(dá)式 reg來代替^/bin.*,然后再匹配第7列符合正則表達(dá)式的行并且返回
2、print與printf
如果要打印 /etc/passwd 中的“第1列 : 第2列”這類情勢的輸出,可以以下操作:
awk -F: '{print $1" : "$2}' /etc/passwd
如果要實(shí)現(xiàn)上述功能,可以用printf操作以下:
awk -F: '{printf("%s : %s\n",$1,$2)}' /etc/passwd

4、awk的流程控制
1、條件語句
格式:if(expression) action1;[else action2]
輸入1串?dāng)?shù)字,單數(shù)打印no,雙數(shù)打印yes,可以以下表示
seq 10|awk '{if($0%2==0){print "ok"}else {print "no"}}'
對文件操作,如果/etc/passwd最后1列是以/bin/bash結(jié)尾的,那末就打印整行的內(nèi)容
awk -F: '{if($NF=="/bin/bash"){print $0}}' /etc/passwd
一樣可以不寫if語句加上1次判斷實(shí)現(xiàn)1樣的功能
awk -F: '$NF=="/bin/bash" {print $0}' /etc/passwd
2、循環(huán)語句
格式:while(condition) action
例:如果我們需要給每一個(gè)依照分隔符分開的列加上1個(gè)列號(hào),如 1:第1列的內(nèi)容 2:第2列的內(nèi)容,.......
awk -F: '{i=1;while(i<=NF){printf(" %d:%s",i,$i);i++}{print " "}}' /etc/passwd
一樣也能用for循環(huán)完成一樣的功能
awk -F: '{for(i=1;i<=NF;i++){printf(" %d:%s",i,$i)}{print " "}}' /etc/passwd
例:需要統(tǒng)計(jì)最后1列的詞出現(xiàn)的頻數(shù)
awk -F: '{a[$NF]++}END{for(i in a){print i":"a[i]}}' /etc/passwd

3、awk數(shù)組
定義1個(gè)數(shù)組并且打印它
awk 'BEGIN{a[5]="Jack";a["name"]="Lilei";print a[5],a["name"]}'
一樣可以用循環(huán)來遍歷
awk_sed$ awk 'BEGIN{a[5]="Jack";a["name"]="Lilei";for(i in a)print i":"a[i]}'

netstat -an | awk '/^tcp/{state[$NF]++}END{for(key in state){print key"\t"state[key]}}'
5、awk函數(shù)
1、算術(shù)函數(shù)
awk的算術(shù)函數(shù)、字符串函數(shù)
int(x) 返回x的整數(shù)部份的值
sqrt(x) 返回x的平方根
rand() 返回偽隨機(jī)數(shù)r,其中0<=r<1
sand(x) 建立rand()新的種子數(shù)。如果沒有指定就用當(dāng)天的時(shí)間。
隨機(jī)數(shù)示例:
awk 'BEGIN{print rand();srand();print rand()}'
2、字符串函數(shù)
sub(),gsub() 替換函數(shù)
index(s,t) 返回子串t在字符串s中的位置,如沒有則返回0。
length(s) 返回字符串長度,當(dāng)沒有給出s時(shí),返回$0的長度。
match(s,r) 如果正則表達(dá)式r在s中匹配到,則返回出現(xiàn)的起始位置,否則返回0
split(s,a,sep) 使用sep將字符串s分解到數(shù)組a中。默許sep為FS。
tolower(s) 將字符串s中的所有大寫字符轉(zhuǎn)換為小寫。
toupper(s) 將字符串s中的所有小寫字符轉(zhuǎn)換為大寫。
例:替換字符串中的某個(gè)單詞。將world換成China,
echo "hello world world" | awk '{sub("world","China");print $0}'
輸出: hello China world

上例只是替換了1個(gè)world,用gsub可以將所有的都進(jìn)行替換
echo "hello world world" | awk '{gsub("world","China");print $0}'
輸出:hello China China

查找子串的位置
echo "hello world world" | awk '{print index($0,"world")}'

用指定分隔符分隔字符串
echo "00⑴1⑵2⑶3⑷4" |awk '{split($0,a,"-");for(i in a){print i":"a[i]}}'

3、自定義函數(shù)
自定義加法
awk 'function sum(n,m) {total=n+m;return total} BEGIN{print sum(1,2)}'

6、1些經(jīng)常使用的操作
1、獲得本機(jī)的ip地址
ifconfig eth0 | awk -F':| +' '/inet addr:/{print $4}'
2、統(tǒng)計(jì)網(wǎng)絡(luò)連接數(shù)
netstat -an | awk '/^tcp/{state[$NF]++}END{for(key in state){print key"\t"state[key]}}' | column -t
3、在做訓(xùn)練集的時(shí)候需要統(tǒng)計(jì)不同種別的散布的時(shí)候,可以有以下辦法(假定label放在最后,個(gè)人習(xí)慣):
cat test.txt | awk '{count[$NF]++}END{for(key in count){print key"\t"count[key]}}' | sort -k2 -n -r
awk '{print $NF}' test.txt | sort | uniq -c | sort -nr
test.txt的最后1列是label,統(tǒng)計(jì)它的label
4、將文件最后1列去掉
awk '{$NF="";print $0 >>"test.txt"}' 51job.txt




生活不易,碼農(nóng)辛苦
如果您覺得本網(wǎng)站對您的學(xué)習(xí)有所幫助,可以手機(jī)掃描二維碼進(jìn)行捐贈(zèng)
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關(guān)閉
程序員人生
主站蜘蛛池模板: 国产精品一区二区三区四区 | 久久久综合av | 91 久久| 日韩在线小视频 | 99热国产在线 | 成人天堂 | 精品国产一区二区三区久久久 | 亚洲福利精品 | 国产一区二区三区在线观看免费 | 六月久久 | 伊人av电影 | www.999热| 黄色av免费在线 | 日韩成人在线电影 | 久久久久无码国产精品一区 | 国产精品三级三级三级 | 亚洲精品久久久久中文字幕欢迎你 | 日日精品| 久久国产区 | 男女免费视频网站 | 久久久精品一区 | 国产精品美女久久久久aⅴ国产馆 | 一区二区免费看 | 亚洲激情视频在线 | 一区二区三区回区在观看免费视频 | 免费在线黄色网址 | 在线观看黄a | 久久久久久久久久久福利 | 日韩欧美综合在线视频 | 毛片特黄 | 久久aa| 亚洲精品久久久久中文字幕欢迎你 | 国产二区视频在线观看 | 污视频网站在线免费观看 | 99只有精品 | 久久国产精品久久w女人spa | 成人高清在线观看 | 欧美日韩在线观看视频 | 黄网站视频在线观看 | 亚洲欧美一级 | 国产精品成人一区二区三区 |