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

歡迎訪問 生活随笔!

生活随笔

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

linux

打开高效文本编辑之门_Linux awk之关联数组

發布時間:2024/9/27 linux 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 打开高效文本编辑之门_Linux awk之关联数组 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Linux awk之關聯數組使用案例

聲明與簡介

AWK 是一種處理文本文件的語言,是一個強大的文本分析工具。awk通常用來處理結構化(固定格式)的文本文件, awk每接收文件的一行,然后執行相應的命令來處理文本。
本文是對awk的初步認識,主要結合數據以案例形式介紹怎樣定義和使用自定義變量以及常見的運算符的使用。

關聯數組(Associative Array),又稱映射(Map)、字典(Dictionary)是一個抽象的數據結構,它包含著類似于(鍵,值)的有序對。


數據說明

emp_3_only.txt,該數據來自全量的員工表的前3行。

7369,smith,clerk,7902,'1980-12-17',800,null,20 7499,allen,salesman,7698,'1981-2-20',1600,300,30 7521,ward,salesman,7698,'1981-2-22',1250,500,30

關聯數組

這里的變量區別于系統變量,是用戶根據業務需要自定義的變量。

定義關聯數組

這里關聯數據的索引可以是數字也可以是字符串,可以混合使用。

# 定義數組array初始化數據后打印出來。 awk 'BEGIN{array[10000]="Hello array";array["idx"]="Hi Awk";print array[10000];print array["idx"];}' # 結果 Hello array Hi Awk

判斷方式訪問元素

# 通過索引是否在數組內來打印元素。 awk 'BEGIN{array[10000]="Hello array";array["idx"]="Hi Awk";if (10000 in array) print array[10000];}' #結果 Hello array

循環遍歷索引

# 通過for循環遍歷關聯數組的索引 awk 'BEGIN{array[10000]="Hello array";array["idx"]="Hi Awk";array[3]="three"; for(var in array) print var;}' #結果 idx 10000 3

循環遍歷元素?

# 通過for循環遍歷關聯數組的元素 awk 'BEGIN{array[10000]="Hello array";array["idx"]="Hi Awk";array[3]="three"; for(var in array) print array[var];}' #結果 Hi Awk Hello array three

刪除元素?

# 通過DELETE關鍵字刪除關聯數據里的元素 awk 'BEGIN{array[10000]="Hello array";array["idx"]="Hi Awk";array[3]="three"; delete array["idx"];for(var in array) print array[var];}' #結果 Hello array three

多維數組?

# 1 定義、使用多維數組 awk 'BEGIN{array[1,1]="Hello array";array[1,2]="Hi Awk";array[2,1]="three";array[2,2]="four";for(var in array) print "Index",var,"對應值為:",array[var];}'#結果: Index 11 對應值為: Hello array Index 21 對應值為: three Index 12 對應值為: Hi Awk Index 22 對應值為: four注:這里是多維數組的形式,數組的索引下標分割符”\034”。# 2 如果數組下標里加上引號,則視為單維數組。 awk 'BEGIN{array["1,1"]="Hello array";array["1,2"]="Hi Awk";array["2,1"]="three";array["2,2"]="four";for(var in array) print "Index",var,"對應值為:",array[var];}' # 單維數組的結果 Index 2,1 對應值為: three Index 1,2 對應值為: Hi Awk Index 2,2 對應值為: four Index 1,1 對應值為: Hello array# 3 多維數組、單維混合情況。 awk 'BEGIN{array["1,1"]="Hello array";array["1,2"]="Hi Awk";array[2,1]="three";array[2,2]="four";for(var in array) print "Index",var,"對應值為:",array[var];}'#結果 Index 1,2 對應值為: Hi Awk Index 21 對應值為: three Index 22 對應值為: four Index 1,1 對應值為: Hello array# 4 可以指定數組下表的顯示格式,這里通過SUBSEP(subscript separator)變量來設置。這里指定為”#”。 awk 'BEGIN{SUBSEP="#";array[1,1]="Hello array";array[1,2]="Hi Awk";array[2,1]="three";array[2,2]="four";for(var in array) print "Index",var,"對應值為:",array[var];}' #結果 Index 1#1 對應值為: Hello array Index 2#1 對應值為: three Index 1#2 對應值為: Hi Awk Index 2#2 對應值為: four

?數組元素排序

# 1 對給定的數組就行排序然后打印。 awk 'BEGIN{array[10000]="Welcome array";array[1]="Hi Awk";array[3]="three";for(var in array) print "行號:",var,array[var]; rnt =asort(array);for(var in array) print "行號:",var,array[var]; print "總行:",rnt;}'# 結果,這里發現數組里的元素按照字母表重新排序了。 行號: 10000 Welcome array 行號: 1 Hi Awk 行號: 3 three 行號: 1 Hi Awk 行號: 2 Welcome array 行號: 3 three 總行: 3# 2 如果同時保留原數組的順序,則可通過asort(originalarray,newarray),遍歷newarry需要提供rnt遍歷,詳細例子見下: awk 'BEGIN{array[10000]="Welcome array";array[1]="Hi Awk";array[3]="three";for(var in array) print "行號:",var,array[var]; rnt =asort(array,arr);for(i=1;i<=rnt;i++) print "行號:",i,arr[i]; print "總行:",rnt;}' # 結果 行號: 10000 Welcome array 行號: 1 Hi Awk 行號: 3 three 行號: 1 Hi Awk 行號: 2 Welcome array 行號: 3 three 總行: 3

數組索引排序

# 對數組里的索引排序后顯示 awk 'BEGIN{array[10000]="Welcome array";array[1]="Hi Awk";array[3]="three";for(var in array) print "行號:",var,array[var]; rnt =asorti(array,arr);for(i=1;i<=rnt;i++) print "行號:",i,arr[i]; print "總行:",rnt;}'#結果 行號: 10000 Welcome array 行號: 1 Hi Awk 行號: 3 three 行號: 1 1 行號: 2 10000 行號: 3 3 總行: 3#注:這里的排序是按照字符串來,而不會將字符串形式的數字轉換為數字再排序。

?

總結

以上是生活随笔為你收集整理的打开高效文本编辑之门_Linux awk之关联数组的全部內容,希望文章能夠幫你解決所遇到的問題。

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