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開始從輸入流中讀取行之前被執行,這是一個可選的語句塊,比如變量初始化、打印輸出表格的表頭等語句通??梢詫懺贐EGIN語句塊中
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

相關推薦

  • 常用命令總結

    ifconfig查看IP地址 date查看日期和時間 cd跳轉到任何目錄 useradd新建一個普通用戶 passwd給用戶設置密碼 poweroff   halt    關機 reboot  重啟 cal  查看日歷 cal -y 查看一年日歷 env  export&nbsp…

    Linux干貨 2017-04-04
  • 第五周練習

    1.顯示當前系統上root,fedora或user1用戶的默認shell         # cat /etc/passwd | cut -d: -f1,7 | grep -E "(fedora|root|user1)" 2.找出/etc/rc.d/init.…

    Linux干貨 2016-11-26
  • 馬哥教育網絡班N22期+第5周課程練習

    馬哥教育網絡班N22期+第5周課程練習 1. 顯示/etc/rc.d/rc.sysinit文件中以#開頭,后面跟至少一個空白字符,而后又有至少一個非空白字符的行;  grep -E "^[#][[:space:]]+[^[:space:]].*" /etc/rc.d/rc.sysinit 2. 顯示…

    Linux干貨 2016-09-19
  • LVS調度方法

    lvs scheduler:     根據其調度時是否考慮后端主機的當前負載,可分為靜態方法和動態方法     靜態方法:僅根據算法本身進行調度:         RR:Round Ronin 輪詢         WRR:Weighted…

    Linux干貨 2017-01-10
  • 【N25第十三周作業】samba配置詳解和安裝

    samba:   功能:     文件系統共享:類unix系統和windows系統之前文件系統共享     打印機共享;     NetBIOS協議;   服務端程序包:samba  &nb…

    Linux干貨 2016-12-18
  • lvm的基本使用

    lvm的創建、擴展、遷移以及邏輯卷快照的使用

    2017-12-08
欧美性久久久久