AWK(一)

本章內容:awk介紹;awk基本用法;awk變量;awk格式化;awk操作符;awk條件判斷;awk循環;awk數組;awk函數;調用系統命令

1:AWK介紹

(一)awk:Aho, Weinberger, Kernighan,報告生成器,格式化文本輸出 ?
有多種版本:New awk(nawk),GNU awk( gawk) ?
gawk:模式掃描和處理語言 ?
基本用法: awk [options] ‘program’ var=value file…
awk [options] -f programfile var=value file…
awk [options] ‘BEGIN{ action;… } pattern{ action;… } END{ action;… }’ file …
awk 程序通常由:BEGIN語句塊、能夠使用模式匹配的通用語句塊 、END語句塊,共3部分組成 ? ? ? program通常是被單引號或雙引號中
選項:
-F 指明輸入時用到的字段分隔符
-v var=value: 自定義變量
? AWK語言
(1)基本格式:awk [options] ‘program’ file…
(2)program:pattern{action statements;..}
(3)pattern和action:
pattern部分決定動作語句何時觸發及觸發事件
BEGIN,END
action statements對數據進行處理,放在{}內指明
print, printf
(4)分割符、域和記錄
awk執行時,由分隔符分隔的字段(域)標記$1,$2..$n稱為域標識。$0為所有域,注意:和shell中變量$符含義不同
文件的每一行稱為記錄
省略action,則默認執行 print $0 的操作
?AWK工作原理
第一步:執行BEGIN{action;… }語句塊中的語句
第二步:從文件或標準輸入(stdin)讀取一行,然后執行pattern{ action;… }語句塊,它逐行掃描文件,從第一行到最后一行重復這個過程,直到文件全部被讀取完畢。
第三步:當讀至輸入流末尾時,執行END{action;…}語句塊
BEGIN語句塊在awk開始從輸入流中讀取行之前被執行,這是一個可選的語句塊,比如變量初始化、打印輸出表格的表頭等語句通常可以寫在BEGIN語句塊中
END語句塊在awk從輸入流中讀取完所有的行之后即被執行,比如打印所有行的分析結果這類信息匯總都是在END語句塊中完成,它也是一個可選語句塊
pattern語句塊中的通用命令是最重要的部分,也是可選的。如果沒有提供pattern語句塊,則默認執行{ print },即打印每一個讀取到的行,awk讀取的每一行都會執行該語句塊

2:AWK基本用法

print格式: print item1, item2, …

要點:

(1) 逗號分隔符

(2) 輸出的各item可以字符串,也可以是數值;當前記錄的字段、變量或awk的表達式

(3) 如省略item,相當于print $0

示例

awk ‘{print “hello,awk”}’

AWK(一)

awk –F”:” ?‘{print}’ /etc/passwd

1

awk –F: ‘{print $1}’ /etc/passwd

2

awk –F: ‘{print $0}’ /etc/passwd

3

awk –F: ‘{print $1”\t”$3}’ /etc/passwd

AWK(一)

tail –3 /etc/fstab |awk ‘{print $2,$4}’

AWK(一)

3:AWK變量

變量:內置和自定義變量

FS:輸入字段分隔符,默認為空白字符
awk -v FS=’:’ ‘{print $1,FS,$3}’ /etc/passwd

AWK(一)
awk –F: ‘{print $1,$3,$7}’ /etc/passwd

AWK(一)

OFS:輸出字段分隔符,默認為空白字符

awk -v FS=‘:’ -v OFS=‘:’ ‘{print $1,$3,$7}’ /etc/passwd

AWK(一)

RS:輸入記錄分隔符,指定輸入時的換行符
awk -v RS=’ ‘ ‘{print }’ /etc/passwd

AWK(一)

ORS:輸出記錄分隔符,輸出時用指定符號代替換行
awk -v RS=’ ‘ -v ORS=’###’‘{print }’ /etc/passwd

AWK(一)

NF:字段數量
awk -F: ‘{print NF}’ /etc/passwd,引用內置變量不用$

AWK(一)
awk -F: ‘{print $(NF-1)}’ /etc/passwd

AWK(一)0

NR:記錄號
awk ‘{print NR}’ /etc/fstab

AWK(一)

 

FNR:各文件分別計數,記錄號
awk ‘{print FNR}’ /etc/fstab /etc/inittab

AWK(一)

FILENAME:當前文件名
awk ‘{print FILENAME,NR,$0}’ /etc/fstab

AWK(一)0

ARGC:命令行參數的個數
awk ‘{print ARGC}’ /etc/fstab /etc/inittab

AWK(一)0
awk ‘BEGIN {print ARGC}’ /etc/fstab /etc/inittab

AWK(一)

ARGV:數組,保存的是命令行所給定的各參數
awk ‘BEGIN {print ARGV[0]}’ /etc/fstab /etc/inittab

AWK(一)

代表第一個參數

awk ‘BEGIN {print ARGV[1]}’ /etc/fstab /etc/inittab

AWK(一)

代表第二個參數

自定義變量(區分字符大小寫)
(1) -v var=value
(2) 在program中直接定義

示例:
awk -v test=’hello gawk’ ‘{print test}’ /etc/fstab

AWK(一)

awk -v test=’hello gawk’ ?‘BEGIN{print test, “is haha” }’

AWK(一)0

awk –F:‘{sex=“male”;print $1,sex,age;age=18}’ /etc/passwd

AWK(一)

調用文件

{sex=”male”;print $1,sex,age;age=18}

awk -F: -f abc.txt /etc/passwd

AWK(一)0

 

本文來自投稿,不代表Linux運維部落立場,如若轉載,請注明出處:http://www.www58058.com/90758

(0)
曲吉福曲吉福
上一篇 2018-01-01 20:27
下一篇 2018-01-01 20:46

相關推薦

  • 測試 網絡班23期

    123123123123

    Linux干貨 2016-09-12
  • Linux的發展史和Linux的終端類型

    Linux的發展史和Linux的終端類型 前言:    隨著時代的發展,Linux所占的市場份額越來越大,目前幾乎百分之九十的服務器市場都被Linux占據。接下來我們來聊聊Linux的發展史。 簡單的說:Linux操作系統是1998年的8月芬蘭的一個叫Linus Torvalds的大學生寫出來的一個類minix的系統。 具體分析: Lin…

    Linux干貨 2016-10-17
  • bash特性及用戶和組的管理相關練習

    1、列出當前系統上所有已經登錄的用戶的用戶名,注意同一個用戶登錄多次,則只顯示一次即可: 2、取出最后登錄到系統的用戶的相關信息: 3、取出當前系統上被用戶當做默認shell最多的那個shell: 4、將/etc/passwd中的第三個字段數值最大的后10個用戶的信息全部改為大寫后保存至/tmp/maxuser.txt文件中: 5、取出當前主機的IP地址: …

    2017-10-16
  • 馬哥教育網絡班21期+第4周課程練習

    1、復制/etc/skel目錄為/home/tuser1,要求/home/tuser1及其內部文件的屬組和其它用戶均沒有任何訪問權限。 # cp -a /etc/skel /home/tuser1 # chmod -R g-rwx,o-rwx /home/tuser1/ 2、編輯…

    Linux干貨 2016-07-16
  • 設計模式 ( 十九 ) 模板方法模式Template method(類行為型)

    設計模式 ( 十九 ) 模板方法模式Template method(類行為型) 1.概述 在面向對象開發過程中,通常我們會遇到這樣的一個問題:我們知道一個算法所需的關鍵步驟,并確定了這些步驟的執行順序。但是某些步驟的具體實現是未知的,或者說某些步驟的實現與具體的環境相關。例子1:銀行業務辦理流程在銀行辦理業務時,一般都包含幾個基本固定步驟:取號排隊->…

    Linux干貨 2015-04-07
  • 在Linux中使用計算器遇到的問題

    進制轉換的時候出現了與理解不同的結果

    Linux干貨 2017-11-14
欧美性久久久久