打开高效文本编辑之门_Linux awk之关联数组
生活随笔
收集整理的這篇文章主要介紹了
打开高效文本编辑之门_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之关联数组的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: H6的后雨刷保险丝在什么地方?
- 下一篇: 你该认识这样的Linux_shell之变