linux awk數組相關操作介紹

用awk進行文本處理,少不了就是它的數組處理。那么awk數組有那些特點,一般常見運算又會怎么樣呢。我們先看下以下的一些介紹,結合樣例我們會解說下它的不同之處。在 awk 中數組叫做關聯數組(associative arrays),由于下標記能夠是數也能夠是串。awk 中的數組不必提前聲明,也不必聲明大小。數組元素用 0 或空串來初始化,這依據上下文而定。比如:

?

一、定義方法

?

1:能夠用數值作數組索引(下標)

Tarray[1]=“cheng mo”
Tarray[2]=“800927”

2:能夠用字符串作數組索引(下標)

Tarray[“first”]=“cheng ”
Tarray[“last”]=”mo”
Tarray[“birth”]=”800927”

使用中 print Tarray[1] 將得到”cheng mo” 而 print Tarray[2] 和 print[“birth”] 都將得到 ”800927” 。

?

二、數組相關函數

[chengmo@localhost ~]$ awk --version
GNU Awk 3.1.5

使用版本號是:3.1以上,不同版本號以下函數不一定同樣

  • 得到數組長度(length方法使用

[chengmo@localhost ~]$ awk 'BEGIN{info="it is a test";lens=split(info,tA," ");print length(tA),lens;}'
4 4

length返回字符串以及數組長度,split進行切割字符串為數組,也會返回切割得到數組長度。

?

(asort使用):

[chengmo@localhost ~]$ awk 'BEGIN{info="it is a test";split(info,tA," ");print asort(tA);}'
4

asort對數組進行排序,返回數組長度。

?

  • 輸出數組內容(無序,有序輸出):

[chengmo@localhost ~]$ awk 'BEGIN{info="it is a test";split(info,tA," ");for(k in tA){print k,tA[k];}}'
4 test
1 it
2 is
3 a

?

for…in 輸出,由于數組是關聯數組,默認是無序的。所以通過for…in 得到是無序的數組。假設須要得到有序數組,須要通過下標獲得。

?

[chengmo@localhost ~]$ awk 'BEGIN{info="it is a test";tlen=split(info,tA," ");for(k=1;k<=tlen;k++){print k,tA[k];}}'?
1 it
2 is
3 a
4 test

注意:數組下標是從1開始,與c數組不一樣。

?

?

  • 推斷鍵值存在以及刪除鍵值:

一個錯誤的推斷方法

[chengmo@localhost ~]$ awk 'BEGIN{tB["a"]="a1";tB["b"]="b1";if(tB["c"]!="1"){print "no found";};for(k in tB){print k,tB[k];}}'?
no found
a a1
b b1
c

?

以上出現奇怪問題,tB[“c”]未定義,可是循環時候,發現已經存在該鍵值,它的值為空,這里須要注意,awk數組是關聯數組,僅僅要通過數組引用它的key,就會自己主動創建改序列.

?

正確推斷方法:

[chengmo@localhost ~]$ awk 'BEGIN{tB["a"]="a1";tB["b"]="b1";if( "c" in tB){print "ok";};for(k in tB){print k,tB[k];}}'??
a a1
b b1

if(key in array) 通過這個方法推斷數組中是否包括”key”鍵值。

?

刪除鍵值:

[chengmo@localhost ~]$ awk 'BEGIN{tB["a"]="a1";tB["b"]="b1";delete tB["a"];for(k in tB){print k,tB[k];}}'?????????????????????
b b1

?

delete array[key]能夠刪除,相應數組key的,序列值。

?

三、二維數組使用(多維數組使用)

awk的多維數組在本質上是一維數組,更確切一點,awk在存儲上并不支持多維數組。awk提供了邏輯上模擬二維數組的訪問方式。例 如,array[2,4] = 1這種訪問是同意的。awk使用一個特殊的字符串SUBSEP (\034)作為切割字段,在上面的樣例中,關聯數組array存儲的鍵值實際上是2\0344。

?

相似一維數組的成員測試,多維數組能夠使用 if ( (i,j) in array)這種語法,可是下標必須放置在圓括號里。
相似一維數組的循環訪問,多維數組使用 for ( item in array )這種語法遍歷數組。與一維數組不同的是,多維數組必須使用split()函數來訪問單獨的下標分量。split ( item, subscr, SUBSEP)

?

[chengmo@localhost ~]$ awk 'BEGIN{

for(i=1;i<=9;i++)
{
? for(j=1;j<=9;j++)??
? {
tarr[i,j]=i*j;
print i,"*",j,"=",tarr[i,j];
? }
}
}'
1 * 1 = 1
1 * 2 = 2
1 * 3 = 3
1 * 4 = 4
1 * 5 = 5
1 * 6 = 6

……

能夠通過array[k,k2]引用獲得數組內容.

?

方法二:

[chengmo@localhost ~]$ awk 'BEGIN{
for(i=1;i<=9;i++)
{
? for(j=1;j<=9;j++)??
? {
tarr[i,j]=i*j;
? }
}
for(m in tarr)??????????????
{

split(m,tarr2,SUBSEP);
print tarr2[1],"*",tarr2[2],"=",tarr[m];
}
}'

?

以上是awk對數組的處理相關,希望對大家實用

轉載于:https://www.cnblogs.com/mfryf/p/3640204.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/376022.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/376022.shtml
英文地址,請注明出處:http://en.pswp.cn/news/376022.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

java求最優解庫,IPOPT在第二次求解時找到最優解

通常當我嘗試使用IPOPT解決問題時&#xff0c;即使問題不可行&#xff0c;IPOPT也會顯示運行過程&#xff0c;例如顯示問題有多少約束以及問題的其他一般信息&#xff0c;但這次我遇到了一個奇怪的問題 . 我第一次解決它沒有顯示的問題&#xff0c;但第二次解決它&#xff0c;I…

ODAC(V9.5.15) 學習筆記(四)TCustomDADataSet(2)

2.連接相關 名稱 類型 說明 Connection 指向一個數據庫連接對象 Disconnected 設置為True將在數據庫關閉后繼續保持數據集的開啟狀態。 3. 數據獲取 名稱 類型 說明 FetchRows Integer 從數據庫服務器獲取一次性獲取數據記錄的條數&#xff0c;缺省25條。 Is…

詳解匯編語言中乘法指令:MUL、IMUL

本文參考了馬維華老師的《微機原理與接口技術》一書 指令格式&#xff1a; MUL REG/MEM &#xff1b;REG寄存器&#xff0c;MEM存儲器 IMUL REG/MEM MUL和IMUL指令分別用于實現無符號數的乘法和有符號數的乘法運算。都只有一個源操作數&#xff0c;可以使寄存器或存儲…

Android Resource介紹和使用

1. 相關文件夾介紹 在Android項目文件夾里面&#xff0c;主要的資源文件是放在res文件夾里面的。assets文件夾是存放不進行編譯加工的原生文件&#xff0c;即該文件夾里面的文件不會像xml&#xff0c;java文件被預編譯&#xff0c;可以存放一些圖片&#xff0c;html&#xff0c…

mysql.sock 111,錯誤2002(HY000):無法通過套接字’/var/run/mysqld/mysqld.sock’連接到本地MySQL服務器(111)...

在Ubuntu計算機上獲取關于問題“ mysql”命令的錯誤&#xff1a;錯誤2002(HY000)&#xff1a;無法通過套接字’/var/run/mysqld/mysqld.sock’連接到本地MySQL服務器(111)服務未以以下錯誤啟動&#xff1a;rootbettorssidekick:/# service mysql startstart: Job failed to sta…

c語言中的break和continue

break和continue是C語言中的兩條語句&#xff0c;這兩條語句在循環和選擇結構中經常會遇到。 break首先最長見與switch語句中。比如我們設計一個程序&#xff0c;通過輸入學生的成績來確定學生成績等級&#xff0c;等級一共分為四等&#xff0c;分別是優秀、良好、一般、較差&a…

構建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后臺管理系統(44)-工作流設計-設計表單...

構建ASP.NET MVC4EF5EasyUIUnity2.x注入的后臺管理系統&#xff08;44&#xff09;-工作流設計-設計表單 原文:構建ASP.NET MVC4EF5EasyUIUnity2.x注入的后臺管理系統&#xff08;44&#xff09;-工作流設計-設計表單系列目錄 設計表單是比較復雜的一步&#xff0c;完成一個表單…

匯編語言中變量的聲明

參考鏈接為&#xff1a;http://zhidao.baidu.com/link?urlQZiRv_6nAzF1XHOG83SwngS1HoRZXWSP2a0uQEHVDON1rP1a07xlXCiYUXd0ORQP32h_7Nhfd-afCMox8q8McKDATAS SEGMENT;定義數據段BUF0 DB 1;定義一個字節型變量&#xff0c;名稱是BUF0&#xff0c;初始值是01HBUF1 DB "2&qu…

php標簽嵌入規范,HTML標簽嵌套的詳細規則

這次給大家帶來HTML標簽嵌套的詳細規則&#xff0c;HTML標簽嵌套的注意事項有哪些&#xff0c;下面就是實戰案例&#xff0c;一起來看一下。最近在重新學習HTML的知識&#xff0c;算是對HTML的一個重新認識吧&#xff01;別小看了這東西&#xff0c;一切的網頁可都是以它為基礎…

6、動態方法調用和使用通配符定義

action名稱后面:!方法名即可;使用通配符:12345678910111213<?xml version"1.0" encoding"UTF-8" ?><!DOCTYPE struts PUBLIC"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN""http://struts.apache.org/dtds…

Sql 函數大全 (更新中...由難到簡

1.字符處理類&#xff1a; 1.1 指定指定字符輸出的次數 select replicate(1a,5) 結果&#xff1a;1a1a1a1a1a &#xff08;5個1a&#xff09;轉載于:https://www.cnblogs.com/shengwei/p/4479662.html

C錯誤處理

本文為個人學習筆記&#xff0c;僅用于個人學習、復習使用&#xff01;c語言不提供對錯誤處理的直接支持&#xff0c;但是作為一種系統編程語言&#xff0c;它以返回值得形式允許您訪問底層數據&#xff0c;在發生錯誤時&#xff0c;大多數的c或Unix函數調用返回1或NULL&#x…

存儲過程——存儲過程與視圖(三)

數據庫視圖&#xff1a;視圖是虛表&#xff0c;是從一個或幾個基本表&#xff08;或視圖&#xff09;中導出的表&#xff0c;在系統的數據字典中僅存放了視圖的定義&#xff0c;不存放視圖對應的數據。 在sql中視圖是基于sql語句的結果集的可視化的表&#xff1b;視圖包含行和列…

php如何轉類型,PHP數據類型轉換

指的是將數據(變量)的值轉換成目標數據類型。PHP中有兩種數據類型轉換方式&#xff1a;自動轉換&#xff0c;強制轉換自動轉換&#xff1a;系統根據操作所需要的類型將變量的值進行對應類型的轉換自動轉換都是系統本身所做的事情&#xff0c;不需要用戶去干預。強制轉換&#x…

lr_start_timer,lr_get_transaction_duration,lr_get_transaction_wasted_time函數使用總結

lr_start_timer&#xff1a; 函數的功能&#xff1a; 為了計算時間更加精確&#xff0c;可以用這個函數去掉LR自身的檢查點所浪費的時間。如text check and image time Action() { double time_elapsed; merc_timer_handle_t timer;web_url("487989.html","URLh…

c可變參數

本文為個人學習筆記&#xff0c;僅供個人學習、復習使用。參考鏈接&#xff1a;鏈接1、鏈接2在c語言中&#xff0c;我們可以定義這樣的函數&#xff0c;函數帶有可變數量的參數。 int func(int num,...){ . . . } int main(){func(2,2,3); }1、要注意定義函數時函數的形式&…

dz打不開plugin. php,Discuz!應用中心打不開空白的解決方法

近期&#xff0c;很多使用Discuz!程序建論壇的站長都會發現&#xff0c;Discuz!后臺的應用中心打不開了。這二天Discuz!終于給出了原因&#xff1a;十分抱歉的通知您&#xff0c;由于資源和人力投入問題&#xff0c;我們已經關閉了 www.discuz.net 的發言權限&#xff0c;但是歷…

編程習題05

1、給定一個數組a[N],我們希望構造數組b[N]&#xff0c;其中b[i]a[0]*a[1]*...*a[N-1]/a[i]。在構造過程&#xff1a;不允許使用除法&#xff1b;要求O(1)空間復雜度和O(n)時間復雜度&#xff1b;除遍歷計數器與a[N] b[N]外&#xff0c;不可使用新的變量(包括棧臨時變量、對空間…

ECshop安裝及報錯解決方案總結

一、安裝ECshop ECShop是一款B2C獨立網店系統 &#xff0c;適合企業及個人快速構建個性化網上商店。系統是基于PHP語言及MYSQL數據庫構架開發的跨平臺開源程序。2006年3月推出以來1.0版以來&#xff0c;受到市場的檢驗&#xff0c;廣受好評。 1.安裝準備 ECshop最新版本為2.7.3…

Command mysql 中文,MySQL Command Line[mysql命令行常用命令]_MySQL

bitsCN.comMySql下載地址&#xff1a;www.mysql.org第一招、mysql服務的啟動和停止net stop mysqlnet start mysql第二招、登陸mysqlmysql -u用戶名-p用戶密碼mysql -uroot -p&#xff0c; 回車後提示你輸入密碼&#xff0c;輸入12345&#xff0c;然後回車即可進入到mysql中了&…