網站首頁 編程語言 正文
awk命令
- awk是一種處理文本文件的語言,是一個強大的文本分析工具, 用于在linux/unix下對文本和數據進行處理 。
- 而且它支持用戶自定義函數和動態正則表達式等先進功能,是linux/unix下的一個強大編程工具
awk工作原理
逐行讀取文本,默認以空格或tab鍵為分隔符進行分隔,將分隔所得的各個字段保存到內建變量中,并按模式或者條件執行編輯命令。
sed命令常用于一整行的處理,而awk比較傾向于將一行分成多個"字段"然后再進行處理。
awk信息的讀入也是逐行讀取的,執行結果可以通過print的功能將字段數據打印顯示。在使用awk命令的過程中,可以使用邏輯操作符 "&&“表示"與”、 “II"表示"或”、 "!“表示"非”; 還可以進行簡單的數學運算,如 +、一、*、/、%、^ 分別表示加、減、乘、除、取余和乘方。
awk的命令格式
awk 選項 "模式或條件 [操作]" ?文件1 文件2 awk -f 腳本文件 文件1 文件2
awk常見的內建變量(可直接使用)
內建變量 | 說明 |
---|---|
FS | 列分割符,制定和每行文本的字段分割符,默認為空格或者制表符 |
NF | 當前處理的行的字段個數 |
NR | 當前處理行的行號(序數) |
$0 | 當前處理行的整行內容 |
$n | 當前處理行的第n個字段(第n列) |
FILENAME | 被處理的文件名 |
RS | 行分隔符,awk從文本上讀取資料時,將根據RS的定義把資料切割成許多條記錄,而awk一次僅讀入一條,以進行處理,預設值是\n |
awk按行輸出文本
awk '(NR>=1)&&(NR<=4){print}' 11.txt#輸出第一到第四行 111111 22222 233333 444444 awk '(NR==1)||(NR==4){print}' 11.txt#輸出第一和第四行 111111 444444 awk 'NR==1,NR==2{print}' 11.txt#輸出第一和第二行 111111 22222 awk '(NR%2)==1{print}' 11.txt#輸出奇數行 111111 233333 55555 awk '(NR%2)==0{print}' 11.txt#輸出偶數行 22222 444444 66666 awk '/^1/{print}' 11.txt#輸出以1為開頭的行 111111 awk '/2$/{print}' 11.txt#輸出以2為結尾的行 22222 awk 'BEGIN{x=0};/^2/{x++};END {print x}' 11.txt #統計以2開頭的行的行數 2
BEGIN模式表示,在處理指定文本之前,需要先執行BEGIN模式中指定的動作,awk再處理指定的文本,之后再執行END模式中指定的動作,END{}語句塊中,往往會放入打印結果等語句。
awk以字段輸出文本
?
字段3為用戶賬號的UID
字段4為所屬基本組賬號的GID
awk通過管道符,雙引號調用shell命令
getline
- 當getline左右無重定向符“<”或“|”時,getline作用于當前文件,讀入當前文件的第一行給其后跟的變量var或$0;應該注意到,由于awk在處理getline之前已經讀入了一行,所以getline得到的返回結果是隔行的。
- 當getline左右有重定向符“<”或“|”時,getline則作用于定向輸入文件,由于該文件是剛打開,并沒有被awk讀入一行,只是getline讀入,那么getline返回的是該文件的第一行,而不是隔行。
例:獲取本機ip,并轉換成二進制
#!/bin/bash #獲取IP ifconfig | awk '(NR==2) {print $2}' #對分段后的IP地址賦值給一個變量 IP=`ifconfig |awk '(NR==2) {print $2}' | awk 'BEGIN {RS="."} ; {print} '` #進行外層循環,四次 for a in $IP do #進行內循環,選用減法進行循環,如果外層循環的值比被減數大,則取余數,并輸出1;反之則輸出0,且不取減法結果。 for ((i=1;i<=255;i+=$i)) do m=$[128/$i] sum=$[$a-$m] if [ $a -ge $m ] then a=$[$a-$m] echo -n "1" #不換行輸出 else echo -n "0" #不換行輸出 fi done echo " " #進行系統默認的空格換行操作 done > test.txt IP1="`cat test.txt`" echo $IP1 | sed 's/ /./g'
原文鏈接:https://blog.csdn.net/weixin_44938203/article/details/122236048
相關推薦
- 2023-05-23 Numpy中扁平化函數ravel()和flatten()的區別詳解_python
- 2022-07-03 pandas選擇或添加列生成新的DataFrame操作示例_python
- 2022-07-22 mybatis源碼之集成spring原理詳解
- 2022-01-03 踩坑解決mongoose對已經存在的集合查詢,查詢條件不起限制作用的問題
- 2023-04-09 利用Matplotlib實現單畫布繪制多個子圖_python
- 2023-07-04 maven引入本地jar,打包問題
- 2023-05-23 numpy數組之讀寫文件的實現_python
- 2022-05-31 C?語言的弱符號與弱引用你了解嗎_C 語言
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支