文字三劍客之 awk命令

2021-10-14 07:44:02 字數 3712 閱讀 8564

awk—》文字處理–》根據條件去擷取字段

awk難點:

1.正則表達

2.if

3.內建函式

4.內建變數

5.for,陣列array

awk 預設的分隔符是空白(空格、tab)

輸入分隔符 -f

輸出分隔符 ,

$1 代表第1個字段

$2 代表第2個字段

以此類推

$0 代表整行

正規表示式和bash一致

數**算符:+,-,*,/,%,++,–

邏輯關係符:&&,||,!

比較操作符:>,<,>=,!=,<=,,,!

文字資料表示式:(精確匹配) ~表示匹配後面的模式(模糊匹配)

who |awk '$2~ /pts/'

awk -f: '$3~/\<...\>/ '

/etc/passwd

print 是awk裡的輸出命令

, 是分隔符號

『{}』 是固定語法

nf 每行$0的字段數

nr 當前處理的行號

rs為輸入記錄分隔符(行分隔符)

fs為輸入字段分隔符號(列分隔符)

ors、ofs為相對應的輸出分隔符o=out

shell裡的變數傳遞到awk裡的問題

1.awk -v

[root@localhost ~]

# sg="panjinhao"

[root@localhost ~]

# echo|awk -v bsg=$sg ''

panjinhao

[root@localhost ~]

# bash xiexy.sh root

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

[root@localhost ~]

# bash -x xiexy.sh root

+ awk -v var=root -f: '$1==var'

/etc/passwd

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

[root@localhost ~]

# cat xiexy.sh

#!/bin/bash

awk -v var=$1

-f: '$1==var'

/etc/passwd

2.或者使用雙引號,是awk內部的$0 1

等1 等

1等符號前需要使用\轉義

[root@localhost ~]

# mv="zhangjie"

[root@localhost ~]

# useradd zhangjie_123

[root@localhost ~]

# cat /etc/passwd|awk -f: "/^$mv/"

awk: 命令列:1: /^zhangjie/

awk: 命令列:1: ^ syntax error

awk: 命令列:1: /^zhangjie/

awk: 命令列:1: ^ syntax error

awk: 命令列:1: /^zhangjie/

awk: 命令列:1: ^ 未預期的新行或字串結束

[root@localhost ~]

# cat /etc/passwd|awk -f: "/^$mv/"

zhangjie_123 1062

3.可以在begin部分定義,整個處理的過程都可以使用,end部分也可以使用

cat /etc/passwd |awk 'begin'
4.使用單引號,將變數引起來,然後前面加乙個$符號再次引用變數的值,相當於取2次值

sg=3

awk -f : '/root/'

/etc/passwd

1.單分支

if (condition) statement

awk -f: ''

/etc/passwd

2.多分支

if

(表示式 )

else

if(表示式 )

else

if(表示式 )

else

$ awk  

end filename

awk -f: ''

/etc/passwd

for (i=0;i<10;i++)

for (i in array)

awk裡如何使用陣列來存放資料?

待更。。。

cat c.txt |tail -3|awk -f,

'$nf !=0 '

cat/etc/passwd|awk -f: 'begin /bash$/end'

[root@localhost lianxi]

# who |awk ''

time:15:02 name:tty1

time:15:33 name:pts/0

cat/etc/passwd|tail -1|awk -f[:/]''

#-f[:/]指定分割符為:或者/

awk -f: '$3 ~ /\<.\>/ '

/etc/passwd

awk -f: '$3 ~ /\<...\>/ '

/etc/passwd

#\<.\ \<...\> 匹配為三大字母組成的

cat/etc/passwd|awk 'fs=":";ofs="#"'

#推薦使用-f指定輸入分隔符

使用nf變數顯示passwd檔案倒數第二列的內容

cat passwd |awk -f: ''

顯示passwd檔案中第5到第10行的使用者名稱

[root@localhost lianxi]

# cat passwd|awk -f: ''|head -10 |tail -5

顯示passwd檔案中第7列不是bash的使用者名稱

cat passwd |awk -f: '/[^bash]/'

顯示passwd檔案中行號是5結尾的行號和行

cat passwd |awk 'nr%10==5 '

用ip add只顯示ip(不能使用tr或者cut命令)

ip add |egrep "inet "

|awk ''

先使用ifconfig,使用awk顯示eth0的入站流量和出站流量(位元組)

ifconfig |head -8|awk '$0 ~/rx.*bytes|tx.*bytes/'

使用awk命令統計以r開頭的使用者數目,顯示如下效果

cat passwd |awk -f: 'begin $1 ~/^r/ end'

/etc/passwd ,$3 是uid 使用者的編號,如果使用者的編號是0 --》管理員,1~999 --》程式使用者

,大於1000 --

-》普通使用者,最後統計出有多少管理員,多少程式使用者,多少普通使用者?

awk -f: 'beginend'

/etc/passwd

三劍客之awk

awk命令的執行過程 滿足 awk從檔案中讀取一行內容到記憶體中 判斷是否滿足條件 滿足 執行對應的命令 輸出到螢幕 不滿足 awk從檔案中讀取一行內容到記憶體中 判斷是否滿足條件 不滿足 繼續讀取檔案裡的內容直到檔案最後awk命令的語法awk 引數 模式 檔案 awk 引數 條件 找誰 檔案 表示...

linux 三劍客之 awk

awk是一種程式語言,用於在linux unix下對文字和資料進行處理。資料可以來自標準輸入 stdin 乙個或多個檔案,或其它命令的輸出。它支援使用者自定義函式和動態正規表示式等先進功能,是linux unix下的乙個強大程式設計工具。它在命令列中使用,但更多是作為指令碼來使用。awk有很多內建的...

linux三劍客之awk

linux三劍客 grep sed awk 與sed類似,awk是行處理器 相比較螢幕處理的優點,在處理龐大檔案時不會出現記憶體溢位或是處理緩慢的問題,它可以對每一行進行切片處理 awk處理過程 依次對每一行進行處理,然後輸出 awk命令形式 awk f f v begin end file f f...