1. 程式人生 > >Linux系統命令三劍客之 awk

Linux系統命令三劍客之 awk

linux 命令 awk

命令名稱:awk

作用:

對文本和數據進行處理

詳細說明:

awk 是一種編程語言,用於在linux/unix下對文本和數據進行處理。

數據可以來自標準輸入(stdin)、一個或多個文件,或其它命令的輸出。

它在命令行中使用,但更多是作為腳本來使用。awk有很多內建的功能,

比如數組、函數等,這是它和C語言的相同之處,靈活性是awk最大的優勢。

語法格式:

awk [options] ‘scripts‘ var=value filename

常用參數:

-F 指定分隔符(可以是字符串或正則表達式)

-f 從腳本文件中讀取awk命令

-v var=value 賦值一個用戶定義變量,將外部變量傳遞給awk

awk 腳本基本結構:

awk ‘BEGIN{ print "start" } pattern{ commands } END{ print "end" }‘ filename

一個awk 腳本通常由BEGIN語句+模式匹配+END語句三部分組成,這三部分都是可選項

工作原理:

第一步執行BEGIN 語句

第二步從文件或標準輸入讀取一行,然後再執行pattern語句,逐行掃描文件到文件全部被讀取

第三步執行END語句

echo "hello world" | awk ‘BEGIN{ print "welcome" } END{ print "2017-08-08" }‘

welcome

2017-08-08

echo -e "hello world" | awk ‘BEGIN{ print "welcome" } {print} END{ print "2017-08-08" }‘

welcome

hello world

2017-08-08

#不加print參數時默認只打印當前的行

[root@mingongge ~]# echo |awk ‘{ a="hello"; b="nihao"; c="mingongge"; print a,b,c; }‘

hello nihao mingongge

#使用print以逗號分隔時,打印則是以空格分界

echo |awk ‘{ a="mgg"; b="mingg"; c="mingongge"; print a" is "b" or "c; }‘

mgg is mingg or mingongge

#awk的print語句中雙引號其實就是個拼接作用

awk 的變量使用:

內置變量

$0 #當前記錄

$1~$n #當前記錄的第N個字段

FS #輸入字段分隔符(-F相同作用)默認空格

RS #輸入記錄分割符,默認換行符

NF #字段個數就是列

NR #記錄數,就是行號,默認從1開始

OFS #輸出字段分隔符,默認空格

ORS #輸出記錄分割符,默認換行符

外部變量傳入

[mingongge@ ~]#a=100

[mingongge@ ~]#b=100

[mingongge@ ~]#echo |awk ‘{print v1*v2 }‘ v1=$a v2=$b

10000

awk 運算與判斷:

算術運算符

+ - 加減

* / & 乘 除 求余

^ * 求冪

++ -- 增加或減少,作為前綴或後綴

[mingongge@ ~]#awk ‘BEGIN{a="b";print a,a++,a--,++a;}‘

b 0 1 1

[mingongge@ ~]#awk ‘BEGIN{a="0";print a,a++,a--,++a;}‘

0 0 1 1

[mingongge@ ~]#awk ‘BEGIN{a="0";print a,a++,--a,++a;}‘

0 0 0 1

#和其它編程語言一樣,所有用作算術運算符進行操作,操作數自動轉為數值,所有非數值都變為0

賦值運算符

= += -= *= /= %= ^= **=

正則運算符

~ !~ 匹配正則表達式/不匹配正則表達式

邏輯運算符

|| && 邏輯或 邏輯與

關系運算符

< <= > >= != =

其它運算符

$ 字段引用

空格 字符串鏈接符

?: 三目運算符

ln 數組中是否存在某鍵值

awk 正則:

^ 行首定位符

$ 行尾定位符

. 匹配任意單個字符

* 匹配0個或多個前導字符(包括回車)

+ 匹配1個或多個前導字符

? 匹配0個或1個前導字符

[] 匹配指定字符組內的任意一個字符/^[ab]

[^] 匹配不在指定字符組內的任意一個字符

() 子表達式

| 或者

\ 轉義符

~,!~ 匹配或不匹配的條件語句

x{m} x字符重復m次

x{m,} x字符至少重復m次

X{m,n} x字符至少重復m次但不起過n次(需指定參數-posix或--re-interval)


本文出自 “民工哥博客” 博客,請務必保留此出處http://mingongge.blog.51cto.com/2429897/1981142

Linux系統命令三劍客之 awk