溫馨提示×

溫馨提示×

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

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

shell三劍客之awk(一)

發布時間:2020-07-27 05:24:17 來源:網絡 閱讀:571 作者:chbo_yang 欄目:開發技術
  • 概述

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

  • 語法

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

  pattern 表示 AWK 在數據中查找的內容。

  action 是在找到匹配內容時所執行的一系列命令。 

  • 入門實例

1. 使用$0查看所要處理的文本內容


[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,對所有行進行處理

[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. 打印用戶和所對應的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內建變量

gawk數據字段和數據行變量
變量

功能

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

  1. 使用FS指定輸入字段默認分隔符

[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指定輸出字段分隔符,默認輸出字段分隔符為空格

[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. 有時候會遇到數據字段占用的多行的情況,經典例子:姓名,地址,電話號碼在不同行。

目標:打印姓名,后面跟電話號碼。

注解:下面這個實例awk把文件中的每一行都當成一個字段,空白行當做數據行分隔符。

[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數據變量
變量功能
ARGC當前命令行參數個數
ARGV包含命令行參數的數組
ENVIRON當前shell環境變量及其值組成的關聯數組
FILENAME用作gawk輸入數據的數據文件的文件名
IGNORECASE設成非零值時,忽略gawk命令中出現的字符串的字符大小寫
FNR當前數據文件中的數據行數
NR已處理的輸入數據行的數目
NF數據文件中的字段總數
  • 使用內部變量,打印報表

[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問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女