1. 程式人生 > >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個字元結束.

一、awk字串轉數字
$ awk 'BEGIN{a="100";b="10test10";print (a+b+0);}'
110
只需要將變數通過”+”連線運算。自動強制將字串轉為整型。非數字變成0,發現第一個非數字字元,後面自動忽略。
二、awk數字轉為字串
$ awk 'BEGIN{a=100;b=100;c=(a""b);print c}'     
100100
只需要將變數與””符號連線起來運算即可。
三、awk字串連線操作(字串連線;連結;串聯)
$ awk 'BEGIN{a="a";b="b";c=(a""b);print c}'     
ab
$ awk 'BEGIN{a="a";b="b";c=(a+b);print c}' 
0

把檔案中的各行串聯起來:

awk 'BEGIN{xxxx="";}{xxxx=(xxxx""$0);}END{print xxxx}' temp.txt
awk 'BEGIN{xxxx="";}{xxxx=(xxxx"\",\""$0);}END{print xxxx}' temp.txt

提取滿足條件的子字串:

 cat > temp
74938 A>G 347589B>C43795743

awk '{x=$0;while (match(x, "[A-Z]>[A-Z]") > 0) {  print substr(x, RSTART, RLENGTH);  x = substr(x, RSTART+RLENGTH);} }' temp

awk字串函式,包含使用示例:

相關推薦

awk 用法使用入門

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

Android入門——Fragment詳解之基本概念與用法

引言 Android在3.0中引入了Fragments的概念,其目的是用在大螢幕裝置上–例如平板電腦上,支援更加動態和靈活的UI設計。平板電腦的螢幕要比手機的大得多,有更多的空間來放更多的UI元件,並且這些元件之間會產生更多的互動。Fragment允許這樣的一

__cplusplus的用法

縮進 def com 頭文件 需要 c/c++ bsp c++編譯 可能 經常在/usr/include目錄下看到這種字句: #ifdef __cplusplusextern "C" {#endif...#ifdef __cplusplus}#endif 不太明白是

Task用法2-任務等待wait

ges tel csharp 子線程 png ted 線程池 rgs 異步 1.Wait 用法 默認情況下,Task 是有線程池中的異步線程執行,是否執行完成,可以通過Task的的屬性IsCompleted 來判斷, 如果想在子線程工作完成之後,在進行後續主線程

Oracle 中MERGE語句的用法轉載

同時 sdn ble reat nth merge type href detail 原文章出處(http://blog.csdn.net/lichkui/article/details/4306299) MERGE語句是Oracle9i新增的語法,用來合並UPDATE和I

使用IntelliJ IDEA 配置Maven入門

創建 ase 軟件 tle bsp 知識 path int down 1. 下載Maven 官方地址:http://maven.apache.org/download.cgi 解壓並新建一個本地倉庫文件夾 2.配置本地倉庫路徑 3.配置maven環境變量

網絡流——poj1273入門

tar ont href problem lan poj1273 入門 org size 題目鏈接:排水溝 題意:現有n個排水溝和m個點(其中1是源點,m是匯點),給定n個排水溝所連接的點,求從源點到匯點的最大流量。 網絡流——poj1273(入門)

Sqlserver時間函數用法

num 系統 一段 con -1 時間格式 第一天 server () --1. 當前系統日期、時間 select getdate() --2015-01-06 09:27:27.277 --2.時間操作 dateadd 在向指定日期加上一段時間的基礎上,返回新的 dat

asp.net性能優化之使用Redis緩存入門

1-43 date 連接 setting 3.4 lose pre 數據庫數據 apps 1:使用Redis緩存的優化思路 redis的使用場景很多,僅說下本人所用的一個場景: 1.1對於大量的數據讀取,為了緩解數據庫的壓力將一些不經常變化的而又讀取頻繁的數據存入redis

Yii2 cache的用法1

數據庫 強制 style 環境 new xca led 內容 expr 數據緩存需要緩存組件提供支持,它代表各種緩存存儲器, 例如內存,文件,數據庫。 ‘components‘ => [ ‘cache‘ => [ ‘cla

oracle nologging用法

而是 array 類型 無效 data 還得 模式 dddd reat 一、oracle日誌模式分為(logging,force logging,nologging) 默認情況是logging,就是會記錄到redo日誌中,force logging是強制記錄日誌,nolog

差分約束系統簡單介紹入門

難點 兩個 技術 最短 短路徑 裏的 http 最大值 image 一直不知道差分約束是什麽類型題目,最近在寫最短路問題就順帶看了下,原來就是給出一些形如x-y<=b不等式的約束,問你是否滿足有解的問題 好神奇的是這類問題竟然可以轉換成圖論裏的最短路徑問題,下面開始詳

Linux基礎之常見命令用法

linux基礎命令入門(一)一、Linux文件目錄結構 在講述之前,先簡短的說說Windows文件結構,打開‘計算機’,看到的一個個的驅動器(盤符,例C盤、D盤等),點開其中任意盤符,看到的是一個個文件或文件夾,繼續打開...,每個盤都有自己的根目錄。若是把其打開過程畫下來,便可得到如下多棵倒樹並列的圖

el 表達式用法

dex 循環 function 大致 哪裏 字符串 用戶 不同 ken el 表達式用法(轉) 1、EL簡介 1)語法結構 ${expression} 2)[]與.運算符 EL 提供.和[]兩種運算符來存取數據。 當要存取的屬

鏈表節點計數入門

self. pytho div elf python java clas true count 這道題沒啥好說的就是一個普通的鏈表遍歷並且計數 Java: /** * Definition for ListNode. * public class ListNode {

整數排序入門

open 數據 -- emp ase ger 之前 oid 語言 給一組整數,按照升序排序,使用選擇排序,冒泡排序,插入排序或者任何 O(n2) 的排序算法。 這道題就是考察排序算法 我上網了解了一下O(n2)的算法有以下幾種 (1)冒泡排序:顧名思義從頭開始將最大的慢慢與

phpcms標簽用法

dot 指定 listorder 萬能 省略號 upd 關聯 blank bsp 1.顯示指定catid的欄目名稱和鏈接 {$CATEGORYS[25][‘catname‘]} {$CATEGORYS[25][‘url‘]} 獲取父欄目id/獲取父欄目名稱 $CATEG

【Linux】基礎每日一命之awk命令

設置變量 兩個 oob 每日 gin water 不能 -o source awk 是一個強大的文本分析工具 語法:awk [選項參數] ‘script‘ var=value file(s)或awk [選項參數] -f scriptfile var=value file(s

awk工具三劍客

ims gawk oot test anti gin consola mon xtu 1、awk介紹:awk:(三劍客之一)awk:是一個強大的文本分析工具,相對於grep的查找,sed的編輯,awk則更支持分段,默認會以空格為分隔符將每行分段,對分段分析處理(匹配 查找

java中正則表達式基本用法

code ack acea print 表達式 劃線 跟著 以及 n) https://www.cnblogs.com/xhj123/p/6032683.html 正則表達式是一種可以用於模式匹配和替換的規範,一個正則表達式就是由普通的字符(例如字符a到z)以及特殊字符(元