awk命令用法

2021-09-29 07:14:51 字數 4615 閱讀 4733

awk語言的最基本功能是在檔案或字串中基於指定規則瀏覽和抽取資訊。 awk抽取資訊後,才能進行其他文字操作。完整的awk指令碼通常用來格式化文字檔案中的資訊。

本章僅注重於講述使用awk執行操作及怎樣從文字檔案和字串中抽取資訊。 本章內容有:

//檢視檔案

[root@lishan ~]# head -2 passwd

root:x:0:0:root:/root:/bin/bash

bin:x:1:1:bin:/bin:/sbin/nologin

//取檔案passwd第二行

[root@lishan ~]# awk -f: 'nr==2' passwd

bin:x:1:1:bin:/bin:/sbin/nologin

[root@lishan ~]# awk -f: nr==1 passwd

root:x:0:0:root:/root:/bin/bash

//取檔案passwd第一列

[root@lishan ~]# awk -f: '' passwd

root

bindaemon

admlp

sync

shutdown

halt

mail

operator

games

ftpnobody

//取檔案passwd第二行第一列

[root@lishan ~]# awk -f: 'nr==2' passwd

bin//取檔案passwd第二行最後一列

[root@lishan ~]# awk -f: 'nr==1' passwd

/bin/bash

//取檔案passwd第二行倒數第二列

[root@lishan ~]# awk -f: 'nr==1' passwd

/root

//取出ip位址用正規表示式

//[ /]表示指定範圍類任意乙個字元,+表示匹配前面任意乙個字元至少一次

[root@lishan ~]# ip a

1: lo: mtu 65536 qdisc noqueue state unknown qlen 1

link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00

inet 127.0.0.1/8 scope host lo

valid_lft forever preferred_lft forever

inet6 ::1/128 scope host

valid_lft forever preferred_lft forever

2: eth0:

mtu 1500 qdisc pfifo_fast state up qlen 1000

link/ether 00:0c:29:69:c9:c3 brd ff:ff:ff:ff:ff:ff

inet 192.168.181.140/24 brd 192.168.181.255 scope global dynamic eth0

valid_lft 1569sec preferred_lft 1569sec

inet6 fe80::20c:29ff:fe69:c9c3/64 scope link

valid_lft forever preferred_lft forever

[root@lishan ~]# ip a|grep 'inet'|awk -f'[ /]+' 'nr==3'

192.168.181.140

//取出檔案abc找到含有lishan一行的最後一列

[root@lishan ~]# cat abc

lishan 1 66 haha

zhaojing 2 78 enen

wangxuan 3 34 hehe

yangwei 4 45 wowo

lishan 5 67 loulou

[root@lishan ~]# awk '/lishan/' abc

haha

//取出檔案abc中含有lishan的一行的最後一列,並寫入到檔案的a中

[root@lishan ~]# awk '/l/ishan/' abc | tee a

haha

loulou

[root@lishan ~]# ls

a abc network.repo nfs.sh passwd scp.exp server.sh ssh-keygen.exp test.awk

[root@lishan ~]# cat a

haha

loulou

//同時取出兩列中間要加入英文符號逗號會顯示出空格

[root@lishan ~]# awk '' abc

lishan 1

zhaojing 2

wangxuan 3

yangwei 4

lishan 5

[root@lishan ~]# awk '' abc

lishan1

zhaojing2

wangxuan3

yangwei4

lishan5

//在awk命令中加入begin開始語句會在輸出時顯示begin裡面的內容

[root@lishan ~]# awk 'begin ' abc

name rank

lishan 1

zhaojing 2

wangxuan 3

yangwei 4

lishan 5

//在awk語句中加入end語句會在輸出結尾處顯示end裡面的內容

[root@lishan ~]# awk 'begin end' abc

name rank

lishan 1

zhaojing 2

wangxuan 3

yangwei 4

lishan 5

以上是全部學生

//用指令碼執行awk命令,在指令碼中寫入想要執行的命令

[root@lishan ~]# cat test.awk

#!/bin/bash/awk

//用awk命令-f執行指令碼並且加需要執行指令碼的檔名

[root@lishan ~]# awk -f test.awk abc12

345//awk加入正規表示式(如果5小於29)就取出全部

[root@lishan ~]# awk '' abc

lishan 1 66 haha

zhaojing 2 78 enen

wangxuan 3 34 hehe

yangwei 4 45 wowo

lishan 5 67 loulou

//在abc檔案的第二列查詢有數字5的那一行並列印

[root@lishan ~]# awk '$2 ~ /5/' abc

lishan 5 67 loulou

//在abc檔案的第二列中取出除去不含數字5的那一行並列印

[root@lishan ~]# awk '$2 !~ /5/' abc

lishan 1 66 haha

zhaojing 2 78 enen

wangxuan 3 34 hehe

yangwei 4 45 wowo

[root@lishan ~]# awk '' abc

lishan 1 66 haha

zhaojing 2 78 enen

wangxuan 3 34 hehe

yangwei 4 45 wowo

//取出檔案中第一列以l開頭n結尾的哪一行

[root@lishan ~]# awk '$1 ~ /^l....n$/' abc

lishan 1 66 haha

lishan 5 67 loulou

//在檔案第三列查詢數字(66或者78)的哪一行並列印

[root@lishan ~]# awk '$3 ~ /(66|78)/' abc

lishan 1 66 haha

zhaojing 2 78 enen

//查詢檔案以l開頭的哪一行並列印

[root@lishan ~]# awk '/^l/' abc

lishan 1 66 haha

lishan 5 67 loulou

//取出檔案中以a結尾的哪一行

[root@lishan ~]# awk '/a$/' abc

lishan 1 66 haha

//取出檔名

[root@lishan ~]# awk 'end' passwd

passwd

//取出檔案總行數

[root@lishan ~]# cat passwd |wc -l

31[root@lishan ~]# awk 'end' passwd

31//取出檔案的總列數,和行數

[root@lishan ~]# awk '' abc

4 1 lishan 1 66 haha

4 2 zhaojing 2 78 enen

4 3 wangxuan 3 34 hehe

4 4 yangwei 4 45 wowo

4 5 lishan 5 67 loulou

awk命令基本用法

本文出自 我是幹勾魚的部落格 顯示磁碟使用情況 df h awk 這裡注意,awk工作流程是這樣的 讀取含有 n 換行符分割的一條記錄,然後將記錄按指定的域分隔符來劃分域,填充域。比如說統計file all.txt檔案內容的行數 awk end userinfo.csv在這裡,管道前列印所有行號,管...

awk用法小結

awk 用法 awk pattern 變數名 含義 argc 命令列變元個數 argv 命令列變元陣列 filename 當前輸入檔名 fnr 當前檔案中的記錄號 fs 輸入域分隔符,預設為乙個空格 rs 輸入記錄分隔符 nf 當前記錄裡域個數 nr 到目前為止記錄數 ofs 輸出域分隔符 ors ...

awk 用法小結

awk 用法 awk pattern 變數名 含義 argc 命令列變元個數 argv 命令列變元陣列 filename 當前輸入檔名 fnr 當前檔案中的記錄號 fs 輸入域分隔符,預設為乙個空格 rs 輸入記錄分隔符 nf 當前記錄裡域個數 nr 到目前為止記錄數 ofs 輸出域分隔符 ors ...