首頁 > php教程 > PHP开发 > Linux awk指令使用詳解

Linux awk指令使用詳解

高洛峰
發布: 2016-12-15 11:14:07
原創
1272 人瀏覽過

簡單介紹一下,awk是一個強大的文本分析工具,相對於grep的查找,sed的編輯,awk在其對數據分析並生成報告時,顯得尤為強大,這是我們玩linux的必備基本功,若要對其身世有更詳盡的了解,請自行搜尋即可。對於工具的知識,筆者盡量將每個知識點的簡要說明,並給予實例。
 
簡單來說awk就是把檔案逐行的讀入,以空格為預設分隔符號將每行切片,切開的部分再進行各種分析處理。
 
用法: 
awk [options] 'scripts' file1,file2... 
awk [options] 'pattern {action}' file1,file2...
 
options是awk的支援的選項,譬如-等等; scripts是其處理腳本,包含模式pattern和動作action(模式和動作的關係一般為,模式負責確定有效字段,動作負責對其處理)
 
一、print的簡單使用
 
創建一個簡單的測試檔如下:

[root@mos download]# cat demo.txt

Welcome to mos blog.

This is a test file.

load#a 例:列印整行awk '{print $0}' demo.txt

Welcome to mos blog.

This is a test file.

例:印製每行的最後一個欄位: $NF

{print $NF}' demo.txt

blog.

file.

例:列印第二個欄位: $2

[root@mos download]# awk '{print $2}' demo.mo.

is

例:打印每行的倒數第二個字段,並在其後打印OK

[root@mos download]# awk '{print $(NF-1),"OK"}' demo. txt

mos OK

test OK

例:印行號

[root@mos download]# awk '{print NR,$0}' demo. a test file.

例:列印目前系統環境變數的某個特定值,譬如路徑,下面兩個輸出一樣

[root@mos download]# awk '{print ENVIRON["USER"];}' demo. txt

[root@mos root

root

[root@mos download]# awk 'BEGIN{print ENVIRON["PATH"];}'

/usr/kerusr/kerberos/bin/ker /sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin

PS:後面的檔案只是為了讓print成功執行,BEGIN是執行前可以輸出的數據,常用作寫為報告標題和測試輸出,其內容不能獲得與文件修改操作有關的變量,後面會說到;

例:awk的默認分隔符為空格,而有些文本字以其他字符為分隔符,以下兩例相同

[root@mos download]# awk -F: {'print $1,$NF'} /etc/passwd|tail -1

mos1 /bin/bash

[root@mos download]# awk -v FS=: '{print $1,$NF}' /etc/passwd|head -1

root /bin/bash

例:修改輸出分隔符號,特殊字元需轉義,如下幾範例:

[root@mos download]# awk -v OFS=. '{print $1,$NF}' demo.txt

Welcome.blog.

This.file.

[root@root download] awk -v OFS="~"'{print $1,$NF}' demo.txt

Welcome~blog.

This~file.

[root@mos download]# awk -v OFS=" '{print $1,$NF}' demo.txt

Welcome"blog.

This"file.

[root@mos download]# awk -v OFS=9 '{print $1,$NF}' demo.txt Welcome9blog.

This9file.

[root@mos download]# awk -v OFS=XXXX '{print $1,$NF}' demo.his

WelcomeXXXPSblog。的之間不寫逗號,則輸出分隔符號無效,輸出的結果會直接連在一起

awk中有許多預設的變量,例如之前列出的:$1~$n、$0、FS、OFS等。下圖為awk內建變數表:

屬性說明

$0 目前記錄(作為單一變數)

$1~$n 目前記錄的第n個字段,字段間由FS分隔

FS 輸入字段分隔符號預設是空格

NF 目前記錄中的字段數,就是有多少列

NR 已經讀出的記錄數,就是行號,從1開始

RS 輸入的記錄他隔符默認為換行符

OFS 輸出欄位分隔符號預設也是空格

ORS 輸出的記錄分隔符,預設為換行符

ARGC 命令列參數個數

ARGV 命令列參數陣列

FILENAME 目前輸入檔案的名稱

進行忽略大小寫的匹配

ARGIND 當前被處理文件的ARGV標誌符

CONVFMT 數字轉換格式%.6g

ENVIRON UNIX環境變量

ERRNO UNIX系統錯誤消息

FIELDWIDTHS 輸入字段寬度的空白分隔字符串

FNR 目前記錄數

OFMT 數字的輸出格式%.6g

RSTART 被匹配函數匹配的字串首

RLENGTH 被匹配函數匹配的字串長度

SUBSEP

聲明一下:由於許多變數筆者亦不怎麼常用,因此筆者此處未全部列出。



更多Linux awk指令使用詳解相關文章請追蹤PHP中文網!


相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
最新問題
熱門推薦
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板