awk簡單使用

awk

用于在linux/unix下對文本和數據進行處理,支持用戶自定義函數和動態正則表達式等先進功能。

命令格式:

awk 'BEGIN{ print “start” } pattern { commend } END{print "end"}' file
awk "BEGIN{ print “start” } pattern { commend } END{print "end"}" file

awk命令也可以從stdin中讀取

構成:BEGIN語句塊、能夠使用模式匹配的通用語句塊、END語句塊。這三個部分是可選的。任意一個部分都可以不出現在腳本中。

awk的工作原理:

第一步:執行BEGIN{ commands }語句塊中的語句;
第二步:從文件或標準輸入(stdin)讀取一行,然后執行pattern{ commands }語句塊,它逐行掃描文件,從第一行到最后一行重復這個過程,直到文件全部被讀取完畢。
第三步:當讀至輸入流末尾時,執行END{ commands }語句塊。

內置變量:

ARGC               命令行參數個數   
ARGV               命令行參數排列   
ENVIRON            支持隊列中系統環境變量的使用 
FILENAME           awk瀏覽的文件名  
FNR                瀏覽文件的記錄數 
FS                 設置輸入域分隔符,等價于命令行 -F選項    
NF                 瀏覽記錄的域的個數   
NR                 已讀的記錄數 
OFS                輸出域分隔符 
ORS                輸出記錄分隔符   
RS                 控制記錄分隔符   
$0                 這個變量包含執行過程中當前行的文本內容    
$1~$n              這個變量包含第1(n)個字段的文本內容

常用選項:

-F  fs       指定用于輸入數據的列分隔符fs                
-v  var=value   在awk程序執行之前指定一個值value變量給var。這些變量值用于awk程序的BEGIN塊    
-f  program-file 指定一個awk程序文件,代替在命令行指定awk指令
打印指定的列

輸出格式:print和printf(可指定格式)
- print的使用格式:print item1, item2, …
- printf的使用格式:printf format, item1, item2, …

$ awk '{print $1,$2}' a.txt 打印a.txt文件的第一列,第二列
設置字段定界符
$ awk -F:'{print $NF}' /etc/passwd 或者  
$ awk 'BEGIN{ FS=":" }{ print $NF }' /etc/passwd

模式

有以下四種模式:
一:/正則表達式/:使用通配符的擴展集。
二:關系表達式:使用運算符進行操作,可以是字符串或數字的比較測試。
三:模式匹配表達式:用運算符 ~(匹配)和 ~!(不匹配)。
四:BEGIN語句塊、pattern語句塊、END語句塊

操作

由一個或多個命令、函數、表達式組成,之間由換行符或分號隔開,并位于大括號內
主要部分:變量或數組賦值,輸出命令,內置函數,控制流語句

傳參:
  • 傳外部變量給awk
    -v 可以將外部值(并非來自stdin)傳遞給awk:
var=10000  echo | awk -v variable=$var '{ print variable }'
  • 另一種傳遞外部變量方法:
var1="aaa" var2="bbb" echo | awk '{ print v1,v2 }' v1=$var1 v2=$var2
  • 當輸入來自于文件時使用:
awk '{ print v1,v2 }' v1=$var1 v2=$var2 filename

變量之間用空格分隔作為awk的命令行參數跟隨在BEGIN、{}和END語句塊之后。

數組應用

awk 中的數組不必提前聲明。數組元素用0或空字符串來初始化。

數組的定義

數字做數組索引:

Array[1]="sun" Array[2]="kai"

字符串做數組索引:

Array["first"]="www" Array["last"]="name"

print Array[1]會打印出sun;print[“last”]會得到name。

讀取數組的值:

{ for(item in array) {print array[item]}; }  輸出的順序是隨機的    
{ for(i=1;i<=len;i++) {print array[i]}; }    Len是數組的長度
數組相關函數
得到數組長度:
awk 'BEGIN{info="it is a test";lens=split(info,tA,""); print length(tA) length(tA),lens;}' 結果為:4 4

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

輸出數組內容(無序,有序輸出):
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
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數組不一樣。

內置函數

主要分以下4種類型:算數函數、字符串函數、其它一般函數、時間函數。

算數函數:
格式       描述 
sin( x ) 返回 x 的正弦;x 是弧度。    
exp( x ) 返回 x 冪函數。  
log( x ) 返回 x 的自然對數。  
sqrt( x )    返回 x 平方根。     
int( x ) 返回 x 的截斷至整數的值。    
rand( )        返回任意數字 n,其中 0 <= n < 1srand( [expr] ) 將 rand 函數的種子值設置為 Expr參數的值,或如果省略 Expr 參數則使用某天的時間。返回先前的種子值。
字符串函數
split( String, A, [Ere] )  
將String參數指定的參數分割為數組元素A[1],A[2],...,A[n],并返回n變量的值。    

tolower( String )


返回 String 參數指定的字符串,字符串中每個大寫字符將更改為小寫。

toupper( String )
“`

返回 String 參數指定的字符串,字符串中每個小寫字符將更改為大寫。

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

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

相關文章

Ubuntu 14.04 下 Virtual Judge 的搭建

前期準備工作 1.1 一個Linux系統 因為現場賽的緣故&#xff0c;我一直使用的都是ubuntu。 這里我測試用的是Ubuntu14.04 Desktop 64bit ,當然選擇Server會更好一些. 系統的安裝不再贅述&#xff0c;作為服務器請選用Server版本。1.2 更新源 在搭建環境之前&#xff0c;請確保…

BitMap的原理介紹與實現

BitMap 位圖&#xff08;bitmap&#xff09;是一種非常常用的結構&#xff0c;在索引&#xff0c;數據壓縮等方面有廣泛應用。位圖是通過將數組下標與應用中的一些值關聯映射&#xff0c;數組中該下標所指定的位置上的元素可以用來標識應用中值的情況&#xff08;是否存在或者數…

MySQL與PHP連接

1、mysql_connect()-建立數據庫連接 格式&#xff1a; resource mysql_connect([string hostname [:port] [:/path/to/socket] [, string username] [, string password]]) 例&#xff1a; $conn mysql_connect("localhost", "username", "pa…

QML Profiler性能優化教程

QML Profiler 2018年1月26日 vincent 對于一個程序的開發&#xff0c;性能優化是開發中的一個重要步驟。 我們肯定不希望開發出來的程序表現出卡頓&#xff0c;最好是處處流暢&#xff0c;絲滑般的體驗。 對于C程序&#xff0c;我們有很多方法可以做性能優化&#xff0c;例如…

uburntu在不能自動獲取網絡時的聯網設置

一&#xff1a;網絡基礎配置 1. eth0設置不正確&#xff0c;導致無法正常啟動&#xff0c;修改eth0配置文件就好 ubuntu 12.04的網絡設置文件是/etc/network/interfaces&#xff0c;打開文件&#xff0c;會看到 auto lo iface lo inet loopback 這邊的設置是本地回路。在后…

計算機顯卡知識普及

顯卡知識普及 一、什么是顯卡&#xff1f; 顯示接口卡&#xff08;Video card&#xff0c;Graphics card&#xff09;、顯示器配置卡簡稱為顯卡&#xff0c;是個人電腦基本組成部分之一。 用途是將計算機系統所需要的顯示信息進行轉換驅動&#xff0c;并向顯示器提供信號&…

整除的尾數

Problem Description 一個整數&#xff0c;只知道前幾位&#xff0c;不知道末二位&#xff0c;被另一個整數除盡了&#xff0c;那么該數的末二位該是什么呢&#xff1f; Input 輸入數據有若干組&#xff0c;每組數據包含二個整數a&#xff0c;b(0<10000,10<b<100)&…

QML 控件大全

QML TypeContainerDelayButtonDialDialogButtonBoxDialogDrawerMenuMenuBarOverlayPageIndicatorRangeSliderScrollViewSpinBoxStackViewSwipeViewSwitchTabBarToolBarToolSeparatorToolTipTumbler QML Type 本篇主要介紹QtQuick Controls 2,Qt Creator 5.10 1.Container im…

斐波那契的整除

Description 已知斐波那契數列有如下遞歸定義&#xff0c;f(1)1,f(2)1, 且n>3,f(n)f(n-1)f(n-2)&#xff0c;它的前幾項可以表示為1&#xff0c; 1&#xff0c;2 &#xff0c;3 &#xff0c;5 &#xff0c;8&#xff0c;13&#xff0c;21&#xff0c;34…&#xff0c;現在的…

Qt與QML的枚舉綁定(C++枚舉)

Qt到QML的枚舉綁定 QML中是不支持c的枚舉類型的&#xff0c;所以我們可以使用Qt的元對象系統&#xff0c;即MOS,來幫助我們實現。 進行綁定的好處就是&#xff0c;以后數據發生變化的時候&#xff0c;就是枚舉發生增加修改&#xff0c;添加等的時候&#xff0c;不需要在QML中…

深入理解Qt的.pro文件

深入理解Qt的pro文件模板變量生成目錄生成的應用程序名編譯選項目標文件目錄包含頭文件包含源文件包含資源文件附加頭文件包含鏈接庫預編譯宏平臺相關性處理指定來自ui文件位置指定界面翻譯文本列表指定圖標 深入理解Qt的.pro文件 一般Qt項目我們是使用Qt Creator自動生成的&…

Ubuntu 用vsftpd 配置FTP服務器

最近開學&#xff0c;有好多課程結束后都需要將文件考到優盤里&#xff0c;而本人又有健忘的毛病&#xff0c;經常忘記帶優盤&#xff0c;所以就搭建了自己的ftp服務器&#xff0c;也算是用技術放松自己吧。閑話少敘&#xff0c;進入正題&#xff1a; 網上關于ftp搭建的文章很…

linux的程序打包deb

deb安裝包 deb是Unix系統(其實主要是Linux)下的安裝包&#xff0c;基于 tar 包&#xff0c;因此本身會記錄文件的權限(讀/寫/可執行)以及所有者/用戶組。 由于 Unix 類系統對權限、所有者、組的嚴格要求&#xff0c;而 deb 格式安裝包又經常會涉及到系統比較底層的操作&#…

利用pyinstaller打包python3程序

pyInstaller是一款用于將pyhon程序打包成exe文件的工具&#xff0c;pyInstaller不是一個python的包&#xff0c; 只需要把pyInstaller的文件下載下來放到任意為止都可以&#xff0c;也就是說pyInstaller相當于獨立出來專門干打包python的工具&#xff0c;這貨是工具不是庫&…

C++11新特性之左值右值及移動語句與完美轉發

C左值右值左值和右值的由來什么是左值和右值左值右值的本質引用左值引用右值引用 移動語句與完美轉發移動語句實現移動構造函數和轉移賦值函數stdmove完美轉發Perfect Forwarding C左值右值 自從C11發布之后&#xff0c;出現了一個新的概念&#xff0c;即左值和右值&#xf…

nginx中的nginx.conf.default配置

#運行用戶 user nobody; #啟動進程,通常設置成和cpu的數量相等 worker_processes 1;#全局錯誤日志及PID文件 #error_log logs/error.log; #error_log logs/error.log notice; #error_log logs/error.log info;#pid logs/nginx.pid;#工作模式及連接數上限 events {…

C++11新特性之泛型編程與模板

模板泛型編程函數模板普通函數模板成員函數模板函數模板重載模板函數的特化 類模板類模板中的成員函數模板類模板的特化與偏特化類模板成員特化 模板 Template所代表的泛型編程是C語言中的重要組成部分。 泛型編程 泛型編程&#xff08;Generic Programming&#xff09;是…

WordPress更改“固定鏈接”后 頁面404原因及解決方法(Nginx版)

網上盛傳的方法是&#xff1a; 在 /etc/nginx/nginx.conf文件的 loction / {} 中添加 if (-f $request_filename/index.html){rewrite (.*) $1/index.html break; }if (-f $request_filename/index.php){rewrite (.*) $1/index.php; }if (!-f $request_filename){rewrite (.*…

C++類型萃取之type_traits和type_info

類型萃取類型判斷typeiddecltype和declvalenable_if 類型萃取 通過type_traits可以實現在編譯期計算、查詢、判斷、轉換和選擇&#xff0c;增強了泛型編程的能力&#xff0c;也增強了我們程序的彈性&#xff0c;讓我們能夠在編譯期就能夠優化改進甚至排錯&#xff0c;進一步提…

使用Phpstorm實現遠程開發

Phpstorm除了能直接打開本地文件之外&#xff0c;還可以連接FTP&#xff0c;除了完成正常的數據傳遞任務之外&#xff0c;還可以進行本地文件與服務端文件的異同比較&#xff0c;同一文件自動匹配目錄上傳&#xff0c;下載&#xff0c;這些功能是平常IDE&#xff0c;FTP軟件中少…