十五 gawk命令使用

2022-05-06 18:51:10 字數 3148 閱讀 7435

gawk命令

gawk程式是unix中原始awk程式的gnu版本。

它可以用來寫指令碼的方式處理文字資料。

他可以語法格式

gawk options program file

gawk選項

選項描述

-f fs

指定分隔符

-f file

指定含有命令的檔案

-v var=value

定義變數

-mf n

指定處理檔案中最大字段數

-mr n

指定資料檔案中最大資料行數

-w keyword

指定gawk的相容模式或警告等級

從命令列讀取程式指令碼

gawk命令的指令碼使用花括號定義。

gawk命令認為指令碼是一串字串所以還需要用單引號括起來。

gawk程式會針對資料流中的每行文字執行程式指令碼。

注意:如下命令,因為沒有在命令列上指定檔名,gawk缺省會從stdin也就是鍵盤接收資料。

即從鍵盤中中隨便輸入文字,接著都會執行輸出hello world!然後再等待輸入。

[root@tzpc 19unit]# gawk ''this is a test

hello world!

ctrl+d可以終止gawk程式

使用資料字段變數

gawk會自動給一行中每個資料字段分配乙個變數

$0代表整個文字行

$1代表文字行中的第1個資料字段

$2代表文字行中第2個資料字段

在文字行中每個資料字段都是通過字段分隔符劃分的。預設是空格或製表符

[root@tzpc 19unit]# catdata2.txt 

one line of test text.

two lines of test text.

three lines of test text.

[root@tzpc 19unit]# gawk ''data2.txt

onetwo

three

-f引數更改字段分隔符

[root@tzpc 19unit]# gawk -f: '' /etc/passwdroot

bindaemon

admlp

syncshutdown

...

在程式指令碼中使用多個命令

使用分號分隔命令即可。

[root@tzpc 19unit]# echo "my name is tz" | gawk ''my name is root

也可以使用如下寫法

因為沒有輸入資料流,所以gawk缺省會從stdin中獲取資料也就是從鍵盤中獲取,所以要手動輸入資料,然後才會執行gawk命令輸出資料,使用ctrl+d退出程式

[root@tzpc ~]# gawk ''

my name is tz

my name is root

從檔案中讀取程式命令

使用-f選項指定命令檔案

[root@tzpc 19unit]# cat script2.gawk

[root@tzpc 19unit]# gawk -f: -f script2.gawk /etc/passwdroot's home directory is /root

bin's home directory is /bin

daemon's home directory is /sbin

adm's home directory is /var/adm

...

使用含有多行命令的命令檔案

注意:這裡定義了變數text,再次呼叫它的時候不需要加$

[root@tzpc 19unit]# cat script3.gawk

[root@tzpc 19unit]# gawk -f: -f script3.gawk /etc/passwdroot's home directory is /root

bin's home directory is /bin

daemon's home directory is /sbin

adm's home directory is /var/adm

lp's home directory is /var/spool/lpd

sync's home directory is /sbin

在處理資料前執行指令碼

使用關鍵字begin

[root@tzpc 19unit]# catdata3.txt 

line 1line 2line 3[root@tzpc 19unit]# gawk 'begin

> 'data3.txt

the data3 file contents:

line 1line 2line 3

再處理資料後執行指令碼

使用end關鍵字

[root@tzpc 19unit]# gawk 'begin 

>

> end 'data3.txt

line 1line 2line 3end of file

高大上的格式化輸出報告用法來了,圈重點!

[root@tzpc 19unit]# cat script4.gawkbegin

end[root@tzpc 19unit]# gawk -f script4.gawk /etc/passwdthe latest list of users and shells

userid shell

------- -------root /bin/bash

bin /sbin/nologin

postfix /sbin/nologin

sshd /sbin/nologin

tz /bin/bash

this concludes the listing

學習來自:《linux命令列與shell指令碼大全 第3版》第19章

Windows上GAWK的使用 二

gawk內建環境變數 變數 描述 n 當前記錄的第n個字段,欄位間由fs分隔。0 完整的輸入記錄。argc 命令列引數的數目。argind 命令列中當前檔案的位置 從0開始算 argv 包含命令列引數的陣列。convfmt 數字轉換格式 預設值為 6g environ 環境變數關聯陣列。errno ...

Windows上GAWK的使用 三

9.匹配操作符 用來在記錄或者域內匹配正規表示式。如gawk.exe 1 root test.txt將顯示test檔案第一列中以root開頭的行。10.比較表示式 conditional expression r1 expression r2 expression r3,例如 gawk.exe 1 ...

Windows上GAWK的使用 五

14.8.gawk的內建函式 14.8.1.字串函式 sub函式匹配記錄中最大 最靠左邊的子字串的正規表示式,並用替換字串替換這些字串。如果沒有指定目標字串就預設使用整 個記錄。替換只發生在第一次匹配的時候。格式如下 sub regular expression r,substitution str...