日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

linux三剑客之awk (用于个人学习以及回顾)

發布時間:2025/3/18 linux 52 豆豆
生活随笔 收集整理的這篇文章主要介紹了 linux三剑客之awk (用于个人学习以及回顾) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一 . awk工具概述

? ?? awk編程語言/數據處理引擎

  • 創造者:Aho、Weinberger、Kernighan

  • 基于模式匹配檢查輸入文本,逐行處理并輸出

  • 通常用在shell腳本中,獲取指定的數據

  • 單獨用時,可對文本數據做統計

? ?? 命令格式解析

  • ?? 主要用法

    ? ? 格式1:前置命令 | awk [選項] '[條件]{指令}'

    ? ? 格式2:awk [選項] '[條件]{指令}'? 文件...

  • ? 常用命令選項

    ? ? -F :指定分隔符,可省略(默認空格或Tab)



二 . 使用awk提取文本

?2.1 實例1 (直接過濾文件內容)

[root@client?~]#?cat?awktest.txt? hello?the?world this?is??shanghai [root@client?~]#?awk?'{print?$1,$3}'?awktest.txt? hello?world this?shanghai


2.2 實例2 (打印磁盤剩余空間)

[root@client?~]#?df?-h?|?awk?'{print?$4}' 可用 14G 897M 912M 903M 912M 0 836M 183M 183M

2.3 實例3 (輸出passwd文件中以分號分隔的第1、7個字段,顯示的不同字段之間以逗號隔開

[root@client?~]#?awk?-F:?'{print?$1,$7}'?/etc/passwd root?/bin/bash bin?/sbin/nologin daemon?/sbin/nologin adm?/sbin/nologin lp?/sbin/nologin ...?...

2.4 實例4 (awk的print指令不僅可以打印變量,還可以打印常量

[root@svr5?~]#?awk?-F:?'{print?$1,"的解釋器:",$7}'?/etc/passwd [root@svr5?~]#?awk?-F:?'{print?$1,"的解釋器:",$7}'?/etc/passwd root?的解釋器:?/bin/bash bin?的解釋器:?/sbin/nologin …?…

2.5 實例5 (提取網卡信息中RX bytes與TX bytes)

[root@client?~]#?ifconfig?ens33?|?awk?'/RX?p/{print?$5}'? 85570 [root@client?~]#?ifconfig?ens33?|?awk?'/TX?p/{print?$5}'? 94377


三 . awk過濾的時機

  • ?在所有行前處理,BEGIN{ }

    ? 讀入第一行文本之前執行

    ? 一般用來初始化操作

  • 逐行處理,{ }

    ? 逐行讀入文本執行相應的處理

    ? 是最常見的編輯指令塊

  • 在所有行后處理,END{ }

    ? 處理完最后一行文本之后執行

    ? 一般用來輸出處理結果


?3.1? 實例1

[root@client?~]#?awk?'BEGIN?{a=35;print?a+12}' 47

3.2? 實例2 (統計系統中使用bash作為登錄Shell的用戶總個數

[root@client?~]#?awk?'BEGIN{x=0}/bash$/{x++}?END{print?x}'?/etc/passwd 5


四 . awk處理時機

?4.1 正則表達式

? ?? 實例1

[root@client?~]#?awk?-F:?'/^ro/{print}'?/etc/passwd root:x:0:0:root:/root:/bin/bash

? ? 實例2

[root@client?~]#?awk?-F:?'$7!~/bash$/{print?$1,$7}'?/etc/passwd bin?/sbin/nologin daemon?/sbin/nologin adm?/sbin/nologin lp?/sbin/nologin sync?/bin/sync shutdown?/sbin/shutdown

4.2 數值比較

  • ==等于、!=不等于

  • >大于、>=大于或等于

  • <小于、<=小于或等于

?? 實例1

[root@client?~]#?cat?awkreg.txt abcd?xx xx? abcabcd?xx [root@client?~]#?awk?'NR==2{print}'?awkreg.txt??????//輸出第二行文本 xx [root@client?~]#?awk?'$2!="xx"{print}'?awkreg.txt???//輸出第二列不是xx的行 xx? [root@client?~]#?awk?'NF>=2{print}'?awkreg.txt??????//輸出包含2個及以上字段的行 abcd?xx abcabcd?xx

4.3 邏輯比較測試

  • ? && 邏輯與:期望多個條件都成立

  • ? || 邏輯或:只要有一個條件成立立即滿足要求

實例

[root@client?~]#?awk?-F:'$3>=0&&$3<2{print$1,$3}'?/etc/passwd??//列出UID小于2的用戶信息 root?0 bin?1 [root@client?~]#?awk?-F:'$3==1||$3==7{print$1,$3}'?/etc/passwd??//列出UID為1或7的用戶信息 bin?1 halt?7

4.4 運算符

  • +、-、*、/、%

  • ++、--、+=、-=、*=、/=

?實例

[root@client?~]#?awk?'NR%2==1{print}'?awkreg.txt? abcd?xx abcabcd?xx [root@client?~]#?awk?'BEGIN{i=0}{i+=NF}END{print?i}'?awkreg.txt? 5


五 . awk流程控制

分支結構

  • ?單分支

?? if(條件){編輯指令}

  • ?雙分支

?? if(條件){編輯指令1}else{編輯指令2}

  • ?多分支

?? if(條件){編輯指令1}else if(條件){編輯指令2}.. ..

? ? else{編輯指令N}

5.1 單分支實例

[root@client?~]#?awk?-F:?'{if($3<=1000){i++}}END{print?i}'?/etc/passwd??//統計/etc/passwd中UID小于等于1000的用戶個數 39? [root@client?~]#?awk?-F:?'{if($3>1000){i++}}END{print?i}'?/etc/passwd//統計/etc/passwd文件中UID大于1000的用戶個數 4 [root@client?~]#?awk?-F:?'{if($7~/bash$/){i++}}END{print?i}'??/etc/passwd//統計/etc/passwd文件中登錄Shell是“/bin/bash”的用戶個數 5

5.2 雙分支實例

[root@client?~]#?awk?-F:?'{if($3<=500){i++}else{j++}}END{print?i,j}'?/etc/passwd//分別統計/etc/passwd文件中UID小于或等于1000、UID大于1000的用戶個數 30?13 [root@client?~]#?awk?-F:?'{if($7~/bash$/){i++}else{j++}}?END{print?i,j}'?/etc/passwd//分別統計/etc/passwd文件中登錄Shell是“/bin/bash”、?登錄Shell不是“/bin/bash”的用戶個數 5?38


六 . awk數組

數組的定義及使用

  • ?定義數組

?? 格式:數組名[下標]=元素值

  • 調用數組

?? 格式:數組名[下標]

  • 遍歷數組

?? 用法:for(變量 in 數組名){print 數組名[變量]}

6.1 實例

[root@svr5?~]#?awk?'BEGIN{a[0]=11;a[1]=88;print?a[1],a[0]}' 88?11 [root@svr5?~]#?awk?'BEGIN{a++;print?a}' 1 [root@svr5?~]#?awk?'BEGIN{a0++;print?a0}' 1 [root@svr5?~]#?awk?'BEGIN{a[0]++;print?a[0]}' 1 [root@svr5?~]#?awk?'BEGIN{a[0]=00;a[1]=11;a[2]=22;?for(i?in?a){print?i,a[i]}}' 0?0 1?11 2?22


轉載于:https://blog.51cto.com/11483827/2366302

總結

以上是生活随笔為你收集整理的linux三剑客之awk (用于个人学习以及回顾)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。