最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

shell進(jìn)階awk命令編排字段使用詳解

 更新時間:2023年09月25日 08:48:16   作者:bug生產(chǎn)者  
這篇文章主要為大家介紹了shell進(jìn)階awk命令編排字段使用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

awk命令

awk是shell進(jìn)階的重要命令,可以用來編排字段

awk把輸入流看做一串記錄的集合,每條記錄都可以進(jìn)一步細(xì)分為字段,一個awk程序是一對以模式和大括號框起來的操作組合而成的,awk每次從文件中讀取一條記錄

awk [選項(xiàng)] '條件{動作} 條件{動作}' 文件
 -v 設(shè)置變量值

pattern {action} 如模式匹配,則執(zhí)行操作
pattern {action}
# 打印第一個字段
awk 'print $1'
# 打印整行
awk 'print $0'
# 打印第2與第5個字段
awk 'print $2,$5'
# 打印非空行
awk 'NF  > 0 {print $0}'

在讀取數(shù)據(jù)時,默認(rèn)的分隔符是空格,可以使用-F來指定分隔符

#awk [-F 分隔符] '命令' input-file
# 分隔符默認(rèn)是空格
# 例: 打印出root用戶記錄
awk -F: '$1=="root"{print $0}' /etc/passwd

在輸出數(shù)據(jù)時,默認(rèn)的分隔符是空格,可以使用-v來設(shè)置輸出字段分隔符

# 默認(rèn)情況下,-v 改變輸出字段的分隔字符,這里必須設(shè)置OFS變量來改變輸出字段分隔符
awk -F: -v 'OFS=**' '{print $1,$5}' /etc/passwd

標(biāo)量變量

保存單一值的變量叫做標(biāo)量變量,常用的有

  • FILENAME 當(dāng)前輸入文件的名稱

FNR 當(dāng)前輸入文件的當(dāng)前行號,當(dāng)有多個輸入文檔時相當(dāng)有用

FNR == 3   選定第三條記錄

  • FS 字段分隔符,默認(rèn)為空格

NF 當(dāng)前記錄的字段數(shù)

NF == 0    選定空記錄
NF > 3     選定擁有三個字段以上的記錄
NF < 5     選定第1到第4條記錄

  • NR 輸入數(shù)據(jù)流的當(dāng)前行號
  • OFS 輸出字段分隔字符,默認(rèn)為空格
  • ORS 輸出記錄分隔字符,默認(rèn)為\n
  • RS 輸入記錄分隔字符
  • $0 當(dāng)前行的全部內(nèi)容
  • $n 當(dāng)前行的第n的字段的內(nèi)容

自定義變量

可以使用-v來設(shè)置自定義變量

free | awk -v age="10" -v name="lily" '{print name,age}'
lily 10
lily 10
lily 10

BEGIN和END

BEIGIN

BEGIN導(dǎo)致動作指令僅在讀取任何數(shù)據(jù)記錄之前執(zhí)行一次

awk 'BEGIN {print "OK"}'
OK

END

END導(dǎo)致動作指令僅在讀取完所有數(shù)據(jù)記錄后執(zhí)行一次

free | awk 'END {print "共有"NR"行"}'
共有3行

條件判斷

awk還支持if判斷語句

if(判斷條件){
動作指令1;
} else if(判斷條件2){
動作指令2;
} else {
動作指令N;
}

free | awk '{if(NR==1){print $1}else if(NR==2){print $2}}'
total
8008932

循環(huán)語句

awk還支持循環(huán),如for循環(huán)、while循環(huán),且支持使用continue、break、exit來進(jìn)行中斷

for循環(huán)

for(表達(dá)式1;表達(dá)式2;表達(dá)式3) {
動作指令序列
}

awk 'BEGIN{ for (i=1;i<=4;i++) {print i}}'
1
2
3
4

while循環(huán)

while(條件判斷){
動作指令序列;
}

awk 'BEGIN{ i=1; while(i<=4) {print i;i++}}'
1
2
3
4

命令行參數(shù)

awk通過內(nèi)建變量ARGC(參數(shù)計(jì)數(shù))和ARGV(參數(shù)值)讓命令行參數(shù)可用

awk 'BEGIN {print ARGV[0]}'

輸出 awk 

awk 'BEGIN {for (k=0;k<ARGC;k++) print "ARGV["k"]=["ARGV[k]"]"}' a b c
ARGV[0]=[awk]
ARGV[1]=[a]
ARGV[2]=[b]
ARGV[3]=[c]

舉例

統(tǒng)計(jì)磁盤可用空間

df | grep -v tmpfs | awk '{sum+=$4} END{print "磁盤可用容量:"sum/1024/1024"G"}''

磁盤可用容量:1.01912G

統(tǒng)計(jì)nginx各ip訪問次數(shù)

awk ' \
> {IP[$3]++} \
> END { \
> for (i in IP) {print i,IP[i]} \
> }' /var/log/nginx/access.log

以上就是shell進(jìn)階awk命令編排字段使用詳解的詳細(xì)內(nèi)容,更多關(guān)于shell awk命令編排字段的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

最新評論

宁明县| 德保县| 清涧县| 绥芬河市| 筠连县| 宣城市| 逊克县| 太康县| 安丘市| 定襄县| 舞钢市| 竹北市| 新乡市| 巴东县| 尼勒克县| 若尔盖县| 吕梁市| 建湖县| 富阳市| 抚顺市| 隆林| 仙桃市| 谢通门县| 滨海县| 正定县| 贵定县| 康马县| 勐海县| 河源市| 廉江市| 安徽省| 休宁县| 白玉县| 淮滨县| 饶阳县| 井研县| 克什克腾旗| 肃宁县| 克拉玛依市| 都江堰市| 铁岭市|