1. 程式人生 > >linux awk命令詳解(一) awk語法 awk運算 awk陣列

linux awk命令詳解(一) awk語法 awk運算 awk陣列

  • 如何把一行豎排的資料轉換成橫排?

    awk '{printf("%s,",$1)}' filename

awk中使用NR和FNR的一些例子

http://blog.sina.com.cn/s/blog_5a3640220100b7c8.html

http://www.linuxidc.com/Linux/2012-05/61174.htm

一般在awk裡面輸入檔案是多個時,NR==FNR才有意義,如果這個值為true,表示還在處理第一個檔案。

NR==FNR 這個一般用於讀取兩個或者兩個以上的檔案中,用於判斷是在讀取第一個檔案。。

test.txt   10行內容

test2.txt    4行內容

awk '{print NR,FNR}' test.txt test2.txt
1 1
2 2
3 3
4 4
5 5
6 6
7 7
8 8
9 9
10 10
11 1
12 2
13 3
14 4

現在有兩個檔案格式如下:

#cat account
張三|000001
李四|000002
#cat cdr
000001|10
000001|20
000002|30
000002|15

想要得到的結果是將使用者名稱,帳號和金額在同一行打印出來,如下:

張三|000001|10
張三|000001|20
李四|000002|30
李四|000002|15

執行如下程式碼

#awk -F \| 'NR==FNR{a[$2]=$0;next}{print a[$1]"|"$2}' account cdr

註釋:

由NR=FNR為真時,判斷當前讀入的是第一個檔案account,然後使用{a[$2]=$0;next}迴圈將account檔案的每行記錄都存入陣列a,並使用$2第2個欄位作為下標引用.

由NR=FNR為假時,判斷當前讀入了第二個檔案cdr,然後跳過{a[$2]=$0;next},對第二個檔案cdr的每一行都無條件執行 {print a[$1]"|"$2},此時變數$1為第二個檔案的第一個欄位,與讀入第一個檔案時,採用第一個檔案第二個欄位$2為陣列下標相同.因此可以在此使用 a[$1]引用陣列。

awk '{gsub(/\$/,"");gsub(/,/,"");
if ($1>=0.1 && $1<0.2) c1+=1;
else if ($1>=0.2 && $1<0.3) c2+=1;
else if ($1>=0.3 && $1<0.4) c3+=1;
else if ($1>=0.4 && $1<0.5) c4+=1;
else if ($1>=0.5 && $1<0.6) c5+=1;
else if ($1>=0.6 && $1<0.7) c6+=1;
else if ($1>=0.7 && $1<0.8) c7+=1;
else if ($1>=0.8 && $1<0.9) c8+=1;
else if ($1>=0.9 ) c9+=1;
else c10+=1; }
END {printf  "%d\t%d\t%d\t%d\t%d\t%d\t%d\t%d\t%d\t%d\t",c1,c2,c3,c4,c5,c6,c7,c8,c9,c10} ' /NEW

示例/例子

awk '{if($0~/^>.*$/) {tmp=$0; getline; if( length($0)>=200) {print  tmp"\n"$0; } }}'  filename

awk '{if($0~/^>.*$/) {IGNORECASE=1; if($0~/PREDICTED/) {getline;} else {print $0; getline;  print $0; } }}' filename

awk '{if($0~/^>.*$/) {IGNORECASE=1; if($0~/mRNA/) {print $0; getline;  print $0; } else {getline;} }}'  filename

awk '{ temp=$0; getline; if($0~/unavailable/) {;} else {print temp"\n"$0;} }' filename

substr($4,20)     --->  表示是從第4個欄位裡的第20個字元開始,一直到設定的分隔符","結束.

substr($3,12,8)  --->  表示是從第3個欄位裡的第12個字元開始,擷取8個字元結束.

相關推薦

linux awk命令 awk語法 awk運算 awk陣列

如何把一行豎排的資料轉換成橫排? awk '{printf("%s,",$1)}' filename awk中使用NR和FNR的一些例子 http://blog.sina.com.cn/s/blog_5a3640220100b7c8.html http://www.linuxidc.com/Linux

linux free命令

一. 作用     free命令可以顯示當前系統未使用的和已使用的記憶體數目,還可以顯示被核心使用的記憶體緩衝區。 二. 語法  free [選項] 三. 選項       預設情況下,即在沒有選項的情況下,"free"命令顯示記憶體的使用資訊。預設

Linux常用命令--技術流ken

  本節內容   基礎命令:lsmanpwdcdmkdirechotouchcpmvrmrmdircatmorelessheadtailclearpoweroffreboot進階命令(下一章節):aliasunaliasunamesuhostnamehistorywhichwcwwh

linux awk命令轉載

簡介 awk是一個強大的文字分析工具,相對於grep的查詢,sed的編輯,awk在其對資料分析並生成報告時,顯得尤為強大。簡單來說awk就是把檔案逐行的讀入,以空格為預設分隔符將每行切片,切開的部分再進行各種分析處理。 awk有3個不同版本: awk、nawk和gaw

linux系統常用命令

遠程登錄 ring 問號 鏈接 重置 帳號 查看 tar 更新 Linux命令格式:命令選項參數 (大部分命令是這個格式) 註意: 1.命令區分大小寫 2.短選項可以合並 長選項不能合並 如 : 短選項 -l -h 可以合並為 -lh 長選項 不能合並 1

Linux防火墻

iptales filter 1.從協議角度,看數據包流程: ######################### # #資源子網:一層 # 用戶空間 # #####

04-Linux中DNS

訪問 舉例 dynamic linux下 目錄 col ofo 圖片 nslookup 零、關於配置Linux下的DNS中一些名詞的解釋請參見文章“03-關於配置Linux下的DNS中一些名詞的解釋(轉自網絡)”自行學習一、關於DNS配置文件查看DNS配置文件: rpm -

網工最實用最常用的網絡命令之一——Ping 命令

關閉 連通 自己 命令詳解 機房 幫助 辦公室 技術分享 詳解 Ping是Windows、Unix和Linux系統下的一個命令。ping也屬於一個通信協議,是TCP/IP協議的一部分。利用“ping”命令可以檢查網絡是否連通,可以很好地幫助我們分析和判定網絡故障。 網工最實

awk命令

第一篇的連結:Linux awk命令總結(一) 1. 處理陣列 為了在單個變數中儲存多個值,許多程式語言都提供了陣列,在awk中使用關聯陣列提供陣列的功能。 關聯陣列類似於散列表和字典,索引值可以是任意的文字字串,對索引的唯一要求是每個索引字串都能夠唯一的對應賦值給它的資料元素。 (

OpenSSL命令——標準命令

OpenSSL命令分為以下3個部分。 標準命令Standard commands 1. asn1parse: asn1parse用於解釋用ANS.1語法書寫的語句(ASN一般用於定義語法的構成) 演示命令操作順序:4 -> 5

Linux常用命令--技術流ken

  本節內容   aliasunaliasunamesuhostnamehistorywhichwcwwhowhoamipingkillseqdudffreedate 命令詳解   1. alias 設定、’檢視別名 例項1:檢視別名 [[email

AWK命令大全

什麼是awk? 你可能對UNIX比較熟悉,但你可能對awk很陌生,這一點也不奇怪,的確,與其優秀的功能相比,awk還遠沒達到它應有的知名度。awk是什麼?與其它大多數UNIX命令不同的是,從名字上看,我們不可能知道awk的功能:它既不是具有獨立意義的英文單詞,也不是幾個相關

Linux常用命令_檔案過濾分割、統計、kill

grep grep(global search regular expression(RE) and print out the line,全面搜尋正則表示式並把行打印出來)是一種強大的文字搜尋工具,它能使用正則表示式搜尋文字,並把匹配的行打印出來。 格式:

Linux常用命令示例-檔案管理

1、touch 命令 使用說明: Linux touch命令用於修改檔案或者目錄的時間屬性,包括存取時間和更改時間。若檔案不存在,系統會建立一個新的檔案。 使用語法: touch [-acfm][-d<日期時間>][-r<參考檔案或目錄>

Linux 命令Shell腳本的數組

cti err art case lin start shell pre round 1、數組定義 [[email protected] ~]# a=(1 2 3 4 5 6 7 8) [[email protected]-IDC ~]# echo $

Linux 文本對比 diff 命令整理

targe def -h 改變 windows 全部 的人 方便 匹配 diff 命令詳解 1.概述 windows系統下面就有不錯的文本對比工具可以使用,例如常用的Beyond Compare,WinMerge都是圖形界面的比較工具而且使用非常方便,如果你僅僅是在

Linux下的tar壓縮壓縮命令

壓縮歸檔 增加 all log 參數 -c 內容 net logo tar -c: 建立壓縮檔案-x:解壓-t:查看內容-r:向壓縮歸檔文件末尾追加文件-u:更新原壓縮包中的文件 這五個是獨立的命令,壓縮解壓都要用到其中一個,可以和別的命令連用但只能用其中一個。下面的參數是

Linux下MongoDB安裝和配置

一、MongoDB的安裝 1.下載安裝包 下載方式: curl -O https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-3.2.9.tgz 解壓縮壓縮包: tar zxvf mongodb-linux-x

linux的ls命令幾種常用的ls選項排序命令

上一章提到了-s(小寫)選項,其實還有-S(大寫)選項,並且這兩個選項的用法是有所不同的,大寫-S選項其實就是小寫-s的加強版--排序版: 讓我們把這兩個選項對比一下: ls -a -s 總用量 18044     0 .                         

Linux檔案操作--資料夾的建立mkdir命令

一、mkdir命令簡介 mkdir命令用來建立目錄。該命令建立由dirname命名的目錄。如果在目錄名的前面沒有加任何路徑名,則在當前目錄下建立由dirname指定的目錄;如果給出了一個已經存在的路徑,將會在該目錄下建立一個指定的目錄。在建立目錄時,應保證新建