Shell 文字處理(三) Awk報告生成器

2021-10-02 19:54:10 字數 3333 閱讀 8779

根據模式一次從檔案中抽取一行文字,對這行文字進行切片(預設使用空白字元作為分隔符)
[root@server mnt]

# cat test

this | is | a |

file

$1$2

$3$4

[root@server19 mnt]

# awk '' test

this is a file

[root@server19 mnt]

# awk '' test

this

[root@server19 mnt]

# awk '' test

is[root@server19 mnt]

# awk '' test

a[root@server19 mnt]

# awk '' test

file

[root@server19 mnt]

# awk '' test

this is

[root@server19 mnt]

# awk '' test

thisis

以:為分隔符,列印檔案/etc/passwd的第一列和第三列
[root@server19 mnt]

# awk -f ":" '' /etc/passwd

root 0

bin 1

daemon 2

...

[root@server19 mnt]

# awk '' /etc/passwd

/etc/passwd 1

/etc/passwd 2

/etc/passwd 3

/etc/passwd 4

...

[root@server19 mnt]

# awk -f: '' /etc/passwd

1 72 7

3 74 7

[root@server19 mnt]

# awk -f: '/bash$/' /etc/passwd

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

student:x:1000:1000:student user:/home/student:/bin/bash

[root@server19 mnt]

# awk -f: 'nr==3 ' /etc/passwd

daemon:x:2:2:daemon:/sbin:/sbin/nologin

[root@server19 mnt]

# awk -f: 'nr % 2 ==0 ' passwd

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

adm:x:3:4:adm:/var/adm:/sbin/nologin

sync:x:5:0:sync:/sbin:/bin/sync

[root@server19 mnt]

# awk -f: 'nr >=3 && nr <=5 ' passwd

daemon:x:2:2:daemon:/sbin:/sbin/nologin

adm:x:3:4:adm:/var/adm:/sbin/nologin

lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

[root@server19 mnt]

# awk -f: '$# >=0 && $3 <=2 ' /etc/passwd

root 0

bin 1

daemon 2

例項:

[root@server19 mnt]

# awk -f: 'begin end ' passwd

redhat

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

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

3daemon:x:2:2:daemon:/sbin:/sbin/nologin

4adm:x:3:4:adm:/var/adm:/sbin/nologin

5lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

6sync:x:5:0:sync:/sbin:/bin/sync

7shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown

westos

[root@server19 mnt]

# vim test.txt

hui hui xx

***x ni xx

[root@server19 mnt]

# awk 'beginend' test.txt

7

1.if單分支語句

[root@server19 mnt]

# awk -f: 'begin}end' /etc/passwd

2

[root@server19 mnt]# awk -f:

'begin}end'

/etc/passwd

31

2.if雙分支語句

[root@server19 mnt]

# awk -f: 'beginelse}end' /etc/passwd

31 9

3.for迴圈

生成1-5序列

[root@server19 mnt]

# awk 'begin}'12

345[root@server19 mnt]

# seq 5 ##seq命令可以直接生成12

345

4.while迴圈

語法一:

[root@test ~]

# awk 'i=1 {} begin }' test.txt 12

3[root@test ~]

#

語法二:

[root@test ~]

# awk 'begin while (i<3)}' test.txt 12

3[root@test ~]

#

文字處理awk

awk是乙個強大的文字分析工具,相對於grep的查詢,sed的編輯,awk在其對資料分析並生成報告時,顯得尤為強大。簡單來說awk就是把檔案逐行的讀入,以空格為預設分隔符將每行切片,切開的部分再進行各種分析處理。實際上awk確實有自己的程式語言 樣式掃瞄和處理語言。awk 1.命令列方式 awk f...

awk文字處理

awk是一種程式語言,用於在linux環境中對文字資料進行處理 二 awk的兩種語法格式 awk options conmmand filenames awk options f awk script file filenames f 定義輸入字段分隔符,預設分隔符是空格或製表符 命令begin e...

awk文字處理

awk文字處理 基於模式匹配檢查輸入文字,逐行處理並輸出 通常用在shell指令碼中,獲取指定的資料 單獨用時,可對文字資料做統計 一 語法格式 格式1 命令 awk 選項 條件 格式2 awk 選項 條件 檔案.若有多條語句,可用分號分隔 print是最常用的指令 awk f etc passwd...