溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

shell三劍客之a(chǎn)wk(一)

發(fā)布時(shí)間:2020-07-27 05:24:17 來源:網(wǎng)絡(luò) 閱讀:534 作者:chbo_yang 欄目:開發(fā)技術(shù)
  • 概述

  awk有3個(gè)不同版本: awk、nawk和gawk,未作特別說明,一般指gawk,gawk 是 AWK 的 GNU 版本。   awk是一種優(yōu)良的文本處理工具。簡單來理解,awk逐行讀入數(shù)據(jù),將其賦給變量$0,然后對(duì)其進(jìn)行切片處理,以$1,$2,..的切片形式,一段一段進(jìn)行分析處理并輸出。

  • 語法

  awk '{pattern + action}' 或者 awk 'pattern {action}'

  pattern 表示 AWK 在數(shù)據(jù)中查找的內(nèi)容。

  action 是在找到匹配內(nèi)容時(shí)所執(zhí)行的一系列命令。 

  • 入門實(shí)例

1. 使用$0查看所要處理的文本內(nèi)容


[root@chboa ~]# awk '{print $0}' test

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

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

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

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

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

halt:x:7:0:halt:/sbin:/sbin/halt

mail:x:8:12:mail:/var/spool/mail:/sbin/nologin

uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin


2. awk + pattern,只是輸出匹配行,不做其他處理

[root@chboa ]# awk -F: '/root/' test

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

3. awk + action,對(duì)所有行進(jìn)行處理

[root@chboa ]# awk -F: '{print $1}' test

root

bin

daemon

adm

lp

sync

shutdown

halt

mail

uucp

4. awk '/pattern/{action}'匹配并處理輸出

[root@chboa ]# awk -F: '/root/{print $7}' test

/bin/bash

5. 打印用戶和所對(duì)應(yīng)的bash,中間用tab分割

[root@chboa ~]# awk -F: '{print $1"\t"$7}' test 

root    /bin/bash

bin     /sbin/nologin

daemon  /sbin/nologin

adm     /sbin/nologin

lp      /sbin/nologin

sync    /bin/sync

shutdown        /sbin/shutdown

halt    /sbin/halt

mail    /sbin/nologin

uucp    /sbin/nologin

  • awk內(nèi)建變量

gawk數(shù)據(jù)字段和數(shù)據(jù)行變量
變量

功能

FIELDWIDTHS用空格分隔開的定義了每個(gè)數(shù)據(jù)字段確切寬度的一列數(shù)字
FS輸入字段分隔符
RS輸入數(shù)據(jù)行分隔符
OFS輸出字段分隔符
ORS輸出數(shù)據(jù)行分隔符
  • 實(shí)例

  1. 使用FS指定輸入字段默認(rèn)分隔符

[root@chboa sed.test]# awk 'BEGIN{FS=":"}{print $1,$2}' test     

root x

bin x

daemon x

adm x

lp x

sync x

shutdown x

halt x

mail x

uucp x

2. 使用OFS指定輸出字段分隔符,默認(rèn)輸出字段分隔符為空格

[root@chboa ~]# awk 'BEGIN{FS=":";OFS="-"}{print $1,$2,$3}' test

root-x-0

bin-x-1

daemon-x-2

adm-x-3

lp-x-4

sync-x-5

shutdown-x-6

halt-x-7

mail-x-8

uucp-x-10

3. 使用FIELDWIDTHS指定切分的固定寬度

[root@chboa ]# awk 'BEGIN{FIELDWIDTHS="6 2 3 3"}{print $1,$2,$3,$4}' test

root:x :0 :0: roo

bin:x: 1: 1:b in:

daemon :x :2: 2:d

adm:x: 3: 4:a dm:

lp:x:4 :7 :lp :/v

sync:x :5 :0: syn

shutdo wn :x: 6:0

halt:x :7 :0: hal

mail:x :8 :12 :ma

uucp:x :1 0:1 4:u

[root@chboa ~]# awk 'BEGIN{FIELDWIDTHS="6 5 8 2 1";OFS="--"}{print $1,$2,$3,$4,$5}' test

root:x--:0:0:--root:/ro--ot--:

bin:x:--1:1:b--in:/bin:--/s--b

daemon--:x:2:--2:daemon--:/--s

adm:x:--3:4:a--dm:/var/--ad--m

lp:x:4--:7:lp--:/var/sp--oo--l

sync:x--:5:0:--sync:/sb--in--:

shutdo--wn:x:--6:0:shut--do--w

halt:x--:7:0:--halt:/sb--in--:

mail:x--:8:12--:mail:/v--ar--/

uucp:x--:10:1--4:uucp:/--va--r

4. 有時(shí)候會(huì)遇到數(shù)據(jù)字段占用的多行的情況,經(jīng)典例子:姓名,地址,電話號(hào)碼在不同行。

目標(biāo):打印姓名,后面跟電話號(hào)碼。

注解:下面這個(gè)實(shí)例awk把文件中的每一行都當(dāng)成一個(gè)字段,空白行當(dāng)做數(shù)據(jù)行分隔符。

[root@chboa ~]# cat phone 

Myke John

Nanjing Road

(123)110110100


Xiao Ming

Zhengzhou 

(456)120120100

[root@chboa ~]# awk 'BEGIN{FS="\n";RS=""}{print $1,$3}' phone 

Myke John (123)110110100

Xiao Ming (456)120120100

gawk數(shù)據(jù)變量
變量功能
ARGC當(dāng)前命令行參數(shù)個(gè)數(shù)
ARGV包含命令行參數(shù)的數(shù)組
ENVIRON當(dāng)前shell環(huán)境變量及其值組成的關(guān)聯(lián)數(shù)組
FILENAME用作gawk輸入數(shù)據(jù)的數(shù)據(jù)文件的文件名
IGNORECASE設(shè)成非零值時(shí),忽略gawk命令中出現(xiàn)的字符串的字符大小寫
FNR當(dāng)前數(shù)據(jù)文件中的數(shù)據(jù)行數(shù)
NR已處理的輸入數(shù)據(jù)行的數(shù)目
NF數(shù)據(jù)文件中的字段總數(shù)
  • 使用內(nèi)部變量,打印報(bào)表

[root@chboa ~]# awk -F: '{print "filename:"FILENAME",linenumber:"NR",columns:"NF",linecontent:"$0}' test

filename:test,linenumber:1,columns:7,linecontent:root:x:0:0:root:/root:/bin/bash

filename:test,linenumber:2,columns:7,linecontent:bin:x:1:1:bin:/bin:/sbin/nologin

filename:test,linenumber:3,columns:7,linecontent:daemon:x:2:2:daemon:/sbin:/sbin/nologin

filename:test,linenumber:4,columns:7,linecontent:adm:x:3:4:adm:/var/adm:/sbin/nologin

filename:test,linenumber:5,columns:7,linecontent:lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

filename:test,linenumber:6,columns:7,linecontent:sync:x:5:0:sync:/sbin:/bin/sync

filename:test,linenumber:7,columns:7,linecontent:shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown

filename:test,linenumber:8,columns:7,linecontent:halt:x:7:0:halt:/sbin:/sbin/halt

filename:test,linenumber:9,columns:7,linecontent:mail:x:8:12:mail:/var/spool/mail:/sbin/nologin

filename:test,linenumber:10,columns:7,linecontent:uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin


向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI