Linux基礎(chǔ)之三劍客AWK基礎(chǔ)篇

awk介紹

  • AWK是一種優(yōu)良的文本處理工具,Linux及Unix環(huán)境中現(xiàn)有的功能最強(qiáng)大的數(shù)據(jù)處理引擎之一
  • 這種編程及數(shù)據(jù)操作語(yǔ)言(其名稱得自于它的創(chuàng)始人阿爾佛雷德·艾侯辛蚊、彼得·溫伯格和布萊恩·柯林漢姓氏的首個(gè)字母)的最大功能取決于一個(gè)人所擁有的知識(shí)
  • AWK(Aho蹂楣、Weinberger、Kernighan) ,報(bào)告生成器揩懒,簡(jiǎn)單的來(lái)說(shuō)就是打報(bào)表,格式化文本輸出
  • 它具備了一個(gè)完整的語(yǔ)言所應(yīng)具有的幾乎所有精美特性
  • 實(shí)際上AWK的確擁有自己的語(yǔ)言:AWK程序設(shè)計(jì)語(yǔ)言挽封,三位創(chuàng)建者已將它正式定義為“樣式掃描和處理語(yǔ)言”
  • AWK版本還特別多;New AWK (nawk), GNU AWK (gawk),當(dāng)然我們用的是GAWK已球,屬于GNU項(xiàng)目

awk基本用法

  • awk報(bào)告生成器,格式化輸出文本文件

  • awk基本語(yǔ)法格式

    • awk [options] ‘program’ var=value file…
    • awk [options] -f programfile var=value file…
    • awk [options] 'BEGIN{ action;… } pattern{ action;… } END
    • action;… }' file ...
  • optinos 表示可選的命令行選項(xiàng)

  • prgoramawk語(yǔ)句

  • var=value自己定義變量

  • file.... 處理文本文件

  • programfile 調(diào)用程序文件

  • program通常是被單引號(hào)或雙引號(hào)中,建議用單引號(hào)辅愿,雙引號(hào)在后面有其他用途

  • awk程序

    • awk 程序通常由:BEGIN語(yǔ)句塊智亮、能夠使用模式匹配的通用語(yǔ)句塊、END語(yǔ)句塊点待,共3部分組成
  • awk選項(xiàng)

    • -F: 指明輸入時(shí)用到的字段分隔符
[root@localhost ~]# awk -F: '{print $1}' /etc/passwd
root
bin
daemon
adm
lp
sync
shutdown
halt
mail
operator
games
ftp
nobody
systemd-bus-proxy
systemd-network
dbus
polkitd
colord
abrt
libstoragemgmt
rpc
 -  -v :var=value: 自定義變量
[root@localhost ~]# awk -v RS=':' '{print }'  /etc/passwd
root
x
0
0
root
/root
/bin/bash
bin
x
1
1
bin
/bin
/sbin/nologin
daemon
x
2
2
daemon
/sbin

awk語(yǔ)言

  • 基本格式:awk [options] 'program' file…
  • program:pattern{action statements;..}
  • pattern和action:
    • pattern:部分決定動(dòng)作語(yǔ)句何時(shí)觸發(fā)及觸發(fā)事件
    • BEGIN:相當(dāng)于處理文件內(nèi)容之前執(zhí)行的一個(gè)語(yǔ)句阔蛉,用于打印標(biāo)題
    • END:
      • action statements:對(duì)數(shù)據(jù)進(jìn)行處理,如統(tǒng)計(jì)癞埠、匯總等
  • 分割符状原、域和記錄
  • awk在執(zhí)行時(shí),由分割符來(lái)分割字段燕差,可以用冒號(hào)或者斜線等等要看自己的指定
  • 切割完已后那就是一個(gè)字段遭笋,可以說(shuō)是局部變量$1$2...... 用awk自己來(lái)調(diào)用徒探,不用自己聲明瓦呼,有一個(gè)需要注意$0就是所有字段或所有列
  • 選項(xiàng)-F就是用來(lái)指定分割符的
  • 域的意思就是已經(jīng)被切割完的字符,也可以稱呼為列或字段等,比如說(shuō)第一行就用$1他會(huì)把一列全打印顯示處理
  • 記錄就是說(shuō)一行就是一條記錄央串,怎么去區(qū)分行一行或幾行磨澡,那就是分割符,分割符要看自己來(lái)指定千萬(wàn)別記太死
  • 默認(rèn)空格為換行符质和,但是其他的換行符需要自己指定

awk工作原理

  • 第一步:執(zhí)行BEGIN{action;… }語(yǔ)句塊中的語(yǔ)句
  • 第二步:從文件或標(biāo)準(zhǔn)輸入(stdin)讀取一行稳摄,然后執(zhí)行pattern{ action;… }語(yǔ)句塊,它逐行掃描文件饲宿,從第一行到最后一行重復(fù)這個(gè)過(guò)程厦酬,直到文件全部被讀取完畢
  • 第三步:當(dāng)讀至輸入流末尾時(shí),執(zhí)行END{action;…}語(yǔ)句塊
  • BEGIN:這是一個(gè)可選的語(yǔ)句塊瘫想,比如變量初始化仗阅、打印輸出表格的表頭等語(yǔ)句
  • END: 這也是一個(gè)科學(xué)的語(yǔ)句塊,比如打印所有行的分析結(jié)果等信息匯總或awk輸入流讀取完所有信息將會(huì)執(zhí)行END
  • pattern語(yǔ)句塊中的通用命令是最重要的部分国夜,也是可選的减噪。如果沒(méi)有提供pattern語(yǔ)句塊,則默認(rèn)執(zhí)行{ print }车吹,即打印每一個(gè)讀取到的行筹裕,awk讀取的每一行都會(huì)執(zhí)行該語(yǔ)句塊

print

  • AWK是默認(rèn)讀取標(biāo)準(zhǔn)輸入的命令

  • 讀取多少行就打印多少行,用文件輸入或手動(dòng)輸入都可以

  • 要點(diǎn):

    • 逗號(hào)分隔符
    • 輸出的各item可以字符串窄驹,也可以是數(shù)值朝卒;當(dāng)前記錄的字段、變量或awk的表達(dá)式
    • 如省略item馒吴,相當(dāng)于print $0
  • 示例

    [root@localhost ~]# awk '{print "hello,awk"}' /etc/passwd
hello,awk
hello,awk
hello,awk
hello,awk
hello,awk
hello,awk
hello,awk
hello,awk
  • 在輸出的時(shí)候扎运,打印的內(nèi)容必須要以,號(hào)隔開不然會(huì)合并在一起
[root@localhost ~]# awk -F: '{print $1$4}' /etc/passwd 
root0
bin1
daemon2
adm4
lp7
sync0
shutdown0
halt0
mail12
operator0
games100
ftp50
nobody99
systemd-bus-proxy997
systemd-network192
dbus81
polkitd996
colord995
abrt173
  • 如果用,號(hào)將會(huì)分割開
[root@localhost ~]# awk -F: '{print $1,$4}' /etc/passwd 
root 0
bin 1
daemon 2
adm 4
lp 7
sync 0
shutdown 0
halt 0
mail 12
operator 0
games 100
ftp 50
nobody 99
systemd-bus-proxy 997
systemd-network 192
dbus 81
polkitd 996
colord 995
abrt 173
  • 如果你想用別的符號(hào)來(lái)分割你可以補(bǔ)上,中間加的是字符串哦饮戳,別搞混了
[root@localhost ~]# awk -F: '{print $1"===="$4}' /etc/passwd 
root====0
bin====1
daemon====2
adm====4
lp====7
sync====0
shutdown====0
halt====0
mail====12
operator====0
games====100
ftp====50
nobody====99
systemd-bus-proxy====997
systemd-network====192
dbus====81
polkitd====996
colord====995
abrt====173
  • 注意我們現(xiàn)在用的是變量不用加雙引號(hào)豪治,如果是字符串必須要加雙引號(hào),不然會(huì)這樣
[root@localhost ~]# awk -F: '{print $1====$4}' /etc/passwd  
awk: cmd. line:1: {print $1====$4}
awk: cmd. line:1:            ^ syntax error
  • 那如果我想取磁盤利于分區(qū)利用率怎么取扯罐,可以這樣
[root@localhost ~]# df
Filesystem     1K-blocks    Used Available Use% Mounted on
/dev/sda2       41922560  385320  41537240   1% /
devtmpfs         2008832       0   2008832   0% /dev
tmpfs            2023456       0   2023456   0% /dev/shm
tmpfs            2023456    8772   2014684   1% /run
tmpfs            2023456       0   2023456   0% /sys/fs/cgroup
/dev/sda3       20961280 2679012  18282268  13% /usr
/dev/sda1         508580  148756    359824  30% /boot
tmpfs             404692       0    404692   0% /run/user/0
[root@localhost ~]# df|awk '{print $5}'
Use%
1%
0%
0%
1%
0%
13%
30%
0%
  • 如果我只想要數(shù)值负拟,不想要符號(hào),或我只想要分區(qū)的數(shù)值歹河,怎么取掩浙,我們可以配合grep
[root@localhost ~]# df|grep '^/dev/sd'|awk '{print $5}'|awk -F% '{print $1 }'
1
13
30
  • 如果你什么都不寫會(huì)產(chǎn)生什么后果,那就相當(dāng)打印$0
[root@localhost ~]# awk '{print }' /etc/passwd
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
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
  • 格式輸出的時(shí)候變量一定要一個(gè)一個(gè)的打印如
[root@localhost ~]# awk -F: '{print $1,$5,$3}' /etc/passwd
root root 0
bin bin 1
daemon daemon 2
adm adm 3
lp lp 4
sync sync 5
shutdown shutdown 6
halt halt 7
mail mail 8
operator operator 11
games games 12
ftp FTP User 14
nobody Nobody 99
  • 不能這樣填寫變量
[root@localhost ~]# awk -F: '{print $1-3}' /etc/passwd     
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
  • 如果你想對(duì)其你可以加一個(gè)或多個(gè)TAB鍵秸歧,但是他是個(gè)字符串必須要加雙引號(hào)
[root@localhost ~]# awk -F: '{print $1"\t\t\t"$3}' /etc/passwd
root                    0
bin                     1
daemon                  2
adm                     3
lp                      4
sync                    5

awk變量

  • 在awk里面也支持內(nèi)置變量和自定義變量

內(nèi)置變量

  • 內(nèi)置變量
  • FS:輸入字段分割符厨姚,默認(rèn)為空白字符
  • FS是個(gè)變量需要賦值,功能和-F一樣
[root@localhost ~]# awk -v FS=: '{print $1}' /etc/passwd
root
bin
daemon
adm
lp
sync
shutdown
halt
mail
operator
games
ftp
nobody
  • 還可以引用變量
[root@localhost ~]# awk -v FS=':' '{print $1,FS,$3}' /etc/passwd
root : 0
bin : 1
daemon : 2
adm : 3
lp : 4
sync : 5
shutdown : 6
halt : 7
mail : 8
operator : 11
games : 12
ftp : 14
nobody : 99
  • OFS:輸出字段分割符键菱,默認(rèn)為空白字符
[root@localhost ~]# awk -F: -v OFS='-' '{print $1,$3}' /etc/passwd    
root-0
bin-1
daemon-2
adm-3
lp-4
sync-5
shutdown-6
halt-7
mail-8
operator-11
games-12
ftp-14
  • RS:輸入記錄分割符谬墙,指定輸入時(shí)的換行符,原換行符仍有效
[root@localhost ~]# awk -v RS=' ' '{print }' /etc/passwd 
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
  • ORS:輸出記錄分隔符,輸出時(shí)用指定符號(hào)代替換行符
[root@localhost ~]# awk -F: -v ORS="---" '{print $1}' /etc/passwd 
root---bin---daemon---adm---lp---sync---shutdown---halt---mail---operator---games---ftp---nobody---systemd-bus-proxy---systemd-network---dbus---polkitd---colord---abrt---libstoragemgmt---rpc---setroubleshoot---rtkit---usbmuxd---tss---geoclue---chrony---mysql---pulse---gdm---rpcuser---nfsnobody---postfix---ntp---ssh
  • NF:字段數(shù)量拭抬,表示一共有7個(gè)字段
[root@localhost ~]# awk -F: 'END{print NF}' /etc/passwd   
7
  • NR :行號(hào)
[root@localhost ~]# awk -F: '{print NR,$1}'  /etc/passwd
1 root
2 bin
3 daemon
4 adm
5 lp
6 sync
7 shutdown
8 halt
9 mail
10 operator
11 games
12 ftp
13 nobody
14 systemd-bus-proxy
15 systemd-network
16 dbus
17 polkitd
18 colord
19 abrt
  • FNR: 各個(gè)文件分別計(jì)數(shù)部默,行號(hào)
[root@localhost ~]# awk '{print FNR,$0}' /etc/issue  /etc/fstab 
1 \S
2 Kernel \r on an \m
3 
4 Mage Education Learning Services
5 http://www.magedu.com
6 
1 
2 #
3 # /etc/fstab
4 # Created by anaconda on Thu Jul 13 08:26:25 2017
5 #
6 # Accessible filesystems, by reference, are maintained under '/dev/disk'
7 # See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
8 #
  • FILENAME:當(dāng)前文件名
[root@localhost ~]# awk -F: '{print FILENAME,$0}' /etc/issue
/etc/issue \S
/etc/issue Kernel \r on an \m
/etc/issue 
/etc/issue Mage Education Learning Services
/etc/issue http://www.magedu.com
/etc/issue 
  • ARGC:命令行參數(shù)的個(gè)數(shù)
[root@localhost ~]# awk -F: '{print ARGC}'  /etc/passwd /etc/issue /etc/fstab 
4
4
4
4
4
4
4
4
4
  • ARGV:數(shù)組,保存的是命令行所給定的各參數(shù)
[root@localhost ~]# awk -F: '{print ARGC,ARGV[0]}'  /etc/passwd /etc/issue /etc/fstab  
4 awk
4 awk
4 awk
4 awk
4 awk
4 awk
4 awk
4 awk
4 awk
4 awk
4 awk
4 awk
4 awk
變量名 屬性
$0 當(dāng)前記錄
$1~$n 當(dāng)前記錄的第n個(gè)字段
FS 輸入只讀分割符 默認(rèn)的是空格
RS 輸入記錄分割符 默認(rèn)為換行符
NF 當(dāng)前記錄中的字段個(gè)數(shù)造虎,就是有多少列
NR 已經(jīng)獨(dú)處的記錄數(shù)傅蹂,就是行號(hào),從1開始
OFS 輸出字段分割符 默認(rèn)也是空格
ORS 輸出的記錄分割符 默認(rèn)為換行符
FNR 分別計(jì)數(shù)
FILENAME 顯示當(dāng)前文件名
ARGC 顯示參數(shù)個(gè)數(shù)
ARGV 打印數(shù)組參數(shù)

注:內(nèi)置變量很多算凿,參閱相關(guān)資料

自定義變量

  • 自定義變量(區(qū)分字符大小寫)
    • -v var=value
    • 在program中直接定義
  • 示例
[root@localhost ~]# awk -v name=root '{print name}' /etc/passwd  
root
root
root
root
root
root
root
root
root
root
root
root
root
root
root
root
root
root
  • 變量調(diào)取還可以這樣
[root@localhost ~]# awk '{sex="male";print sex }'  /etc/passwd
male
male
male
male
male
male
male
male
male
male
male
male
male
male
male
  • 還可以把他寫成一個(gè)腳本如
[root@localhost ~]# vi f1.awk 
 {sex="male";print sex}  
~                                                                 
~                                                                 
  • 把他顯示調(diào)取出來(lái)份蝴,但是要記住在里面不要放單引號(hào)不然出錯(cuò)
[root@localhost ~]# awk -f  f1.awk /etc/passwd
male
male
male
male
male
male
male
male
male
male
male

printf

  • 格式化輸出:printf “FORMAT”, item1, item2, ...
  • 必須指定FORMAT, 也就是格式
  • 不會(huì)自動(dòng)換行,需要顯式給出換行控制符氓轰,\n
  • FORMAT中需要分別為后面每個(gè)item指定格式符
  • 格式符:與item一一對(duì)應(yīng)
輸出控制符 含義
%C 顯示字符的ASCII碼
%d搞乏,%i 顯示十進(jìn)制整數(shù)
%e ,%E 顯示科學(xué)計(jì)數(shù)法數(shù)值
%f 顯示為浮點(diǎn)數(shù)
%g ,%G 以科學(xué)計(jì)數(shù)法或浮點(diǎn)形式顯示數(shù)值
%s 顯示字符串
%u 無(wú)符號(hào)整數(shù)
%% 顯示%自身
  • 修飾符:
    -#[.#]:第一個(gè)數(shù)字控制顯示的寬度戒努;第二個(gè)#表示小數(shù)點(diǎn)后精度,%3.1f
    • -: 左對(duì)齊(默認(rèn)右對(duì)齊) %-15s
    • +:顯示數(shù)值的正負(fù)符號(hào) %+d
  • 示例
[root@localhost ~]# awk -F: '{printf "%s---%d\n", $1,$3}'  /etc/passwd
root---0
bin---1
daemon---2
adm---3
lp---4
sync---5
shutdown---6
halt---7
mail---8
operator---11
games---12
ftp---14
nobody---99
systemd-bus-proxy---999
systemd-network---192
dbus---81
  • 如果你想右對(duì)齊可以這樣镐躲,因?yàn)槟J(rèn)是右對(duì)齊
[root@localhost ~]# awk -F: '{printf "%s---%d\n", $1,$3}'  /etc/passwd
root---0
bin---1
daemon---2
adm---3
lp---4
sync---5
shutdown---6
halt---7
mail---8
operator---11
games---12
ftp---14
nobody---99
systemd-bus-proxy---999
systemd-network---192
dbus---81
  • 如果你想左對(duì)齊储玫,可以這樣
[root@localhost ~]# awk -F: '{printf "%-30s---%d\n", $1,$3}'  /etc/passwd
root                          ---0
bin                           ---1
daemon                        ---2
adm                           ---3
lp                            ---4
sync                          ---5
shutdown                      ---6
halt                          ---7
mail                          ---8
operator                      ---11
games                         ---12
ftp                           ---14
nobody                        ---99
systemd-bus-proxy             ---999
systemd-network               ---192
  • 還可以這樣玩,反正自己看著玩
[root@localhost ~]# awk -F: '{printf "%+30s---%+30d\n", $1,$3}'  /etc/passwd
                          root---                            +0
                           bin---                            +1
                        daemon---                            +2
                           adm---                            +3
                            lp---                            +4
                          sync---                            +5
                      shutdown---                            +6
                          halt---                            +7
                          mail---                            +8
                      operator---                           +11
                         games---                           +12
  • 還可以添加字符串萤皂,是里面不是外面注意
[root@localhost ~]# awk -F: '{printf "username:%-30s%-10d\n", $1,$3}'  /etc/passwd
username:root                          0         
username:bin                           1         
username:daemon                        2         
username:adm                           3         
username:lp                            4         
username:sync                          5         
username:shutdown                      6         
username:halt                          7         
username:mail                          8         
username:operator                      11        
username:games                         12        
username:ftp                           14        
username:nobody                        99        
username:systemd-bus-proxy             999       
username:systemd-network               192       
username:dbus                          81        

操作符

  • 算術(shù)操作符:
    • x+y, x-y, x*y, x/y, x^y, x%y
    • -x: 轉(zhuǎn)換為負(fù)數(shù)
    • +x: 轉(zhuǎn)換為數(shù)值
  • 字符串操作符:沒(méi)有符號(hào)的操作符撒穷,字符串連接
  • 賦值操作符:
  • =, +=, -=, *=, /=, %=, ^=
  • ++, --
  • 比較操作符:
  • ==, !=, >, >=, <, <=
  • 模式匹配符:~:左邊是否和右邊匹配包含 !~:是否不匹配
  • 示例
  • 下面的意思是如果$0包含root就打印,沒(méi)有就不打印
[root@localhost ~]# awk -F: '$0 ~ /root/{print $0}' /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
  • 如下我想打印小于UID100的用戶
[root@localhost ~]# awk -F: '$3<=1000{print $1,$3}'  /etc/passwd
root 0
bin 1
daemon 2
adm 3
lp 4
sync 5
shutdown 6
halt 7
mail 8
operator 11
games 12
ftp 14
nobody 99
systemd-bus-proxy 999
systemd-network 192
  • 如果我想打印UID大于100的用戶
[root@localhost ~]# awk -F: '$3>=1000{print $1,$3}'  /etc/passwd
nfsnobody 65534
mageedu 1000
  • 邏輯操作符:與&&裆熙,或||端礼,非!
  • 示例
[root@localhost ~]# awk -F: '$3>=0 && $3<=1000 {print $1,$3}' /etc/passwd   
root 0
bin 1
daemon 2
adm 3
lp 4
sync 5
shutdown 6
halt 7
mail 8
operator 11
games 12
ftp 14
nobody 99
systemd-bus-proxy 999
systemd-network 192
dbus 81
  • 或者小于10大于1000,的打印出來(lái)
[root@localhost ~]# awk -F: '$3<=0 || $3>=1000 {print $1,$3}' /etc/passwd  
root 0
nfsnobody 65534
mageedu 1000
  • 還可以取非
[root@localhost ~]# awk -F: '  !  ($3>1000) {print $1,$3}' /etc/passwd 
root 0
bin 1
daemon 2
adm 3
lp 4
sync 5
shutdown 6
halt 7
mail 8
operator 11
games 12
ftp 14
nobody 99
systemd-bus-proxy 999
systemd-network 192
dbus 81

正則表達(dá)式

  • 正則表達(dá)式要多練這里只舉幾個(gè)例子

  • 如果我只想用AWK來(lái)提取磁盤信息入录,怎么取蛤奥,我們可以用包含來(lái)提取

[root@localhost ~]# df|awk '$0 ~ "^/dev/sd"' 
/dev/sda2       41922560  388520  41534040   1% /
/dev/sda3       20961280 2679012  18282268  13% /usr
/dev/sda1         508580  148756    359824  30% /boot
  • 當(dāng)前里面還可以取反
[root@localhost ~]# df|awk '$0 !~ "^/dev/sd"' 
Filesystem     1K-blocks    Used Available Use% Mounted on
devtmpfs         2008832       0   2008832   0% /dev
tmpfs            2023456       0   2023456   0% /dev/shm
tmpfs            2023456    8800   2014656   1% /run
tmpfs            2023456       0   2023456   0% /sys/fs/cgroup
tmpfs             404692       0    404692   0% /run/user/0

BEGIN 和END 模塊

  • 通常,對(duì)于每個(gè)輸入行僚稿,awk 都會(huì)執(zhí)行每個(gè)腳本代碼塊一次凡桥。然而,在許多編程情況中
  • 可能需要在awk 開始處理輸入文件中的文本之前執(zhí)行初始化代碼蚀同。對(duì)于這種情況缅刽,awk 允許
  • 您定義一個(gè)BEGIN 塊。我們?cè)谇耙粋€(gè)示例中使用了BEGIN 塊蠢络。因?yàn)閍wk 在開始處理輸入文件之前會(huì)執(zhí)行BEGIN 塊
  • 因此它是初始化 FS(字段分隔符)變量衰猛、打印頁(yè)眉或初始化其它
    在程序中以后會(huì)引用的全局變量的極佳位置

三目表達(dá)式

  • 三目就是三個(gè)元素,三個(gè)組成部分刹孔,第一部分冒號(hào)啡省,以此類推
  • 示例
[root@localhost ~]# awk -F: '{$3>=1000?username="common user":username="sysuser";printf "%s  %s  %d\n" ,username,$1,$3}' /etc/passwd
sysuser  root  0
sysuser  bin  1
sysuser  daemon  2
sysuser  adm  3
sysuser  lp  4
sysuser  sync  5
sysuser  shutdown  6
sysuser  halt  7
sysuser  mail  8
sysuser  operator  11
sysuser  games  12
sysuser  ftp  14
sysuser  nobody  99
  • 或者來(lái)對(duì)齊下
[root@localhost ~]# awk -F: '{$3>=1000?username="common user":username="sysuser";printf "%s  %20s  %20d\n" ,username,$1,$3}' /etc/passwd 
sysuser                  root                     0
sysuser                   bin                     1
sysuser                daemon                     2
sysuser                   adm                     3
sysuser                    lp                     4
sysuser                  sync                     5
sysuser              shutdown                     6
sysuser                  halt                     7
sysuser                  mail                     8
sysuser              operator                    11
sysuser                 games                    12
sysuser                   ftp                    14
sysuser                nobody                    99
sysuser     systemd-bus-proxy                   999
sysuser       systemd-network                   192
sysuser                  dbus                    81
sysuser               polkitd                   998
sysuser                colord                   997
sysuser                  abrt                   173
sysuser        libstoragemgmt                   996
sysuser                   rpc                    32
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子冕杠,更是在濱河造成了極大的恐慌微姊,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,546評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件分预,死亡現(xiàn)場(chǎng)離奇詭異兢交,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)笼痹,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,224評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門配喳,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人凳干,你說(shuō)我怎么就攤上這事晴裹。” “怎么了救赐?”我有些...
    開封第一講書人閱讀 164,911評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵涧团,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我经磅,道長(zhǎng)泌绣,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,737評(píng)論 1 294
  • 正文 為了忘掉前任预厌,我火速辦了婚禮阿迈,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘轧叽。我一直安慰自己苗沧,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,753評(píng)論 6 392
  • 文/花漫 我一把揭開白布炭晒。 她就那樣靜靜地躺著待逞,像睡著了一般。 火紅的嫁衣襯著肌膚如雪网严。 梳的紋絲不亂的頭發(fā)上飒焦,一...
    開封第一講書人閱讀 51,598評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音屿笼,去河邊找鬼牺荠。 笑死,一個(gè)胖子當(dāng)著我的面吹牛驴一,可吹牛的內(nèi)容都是我干的休雌。 我是一名探鬼主播,決...
    沈念sama閱讀 40,338評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼肝断,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼杈曲!你這毒婦竟也來(lái)了驰凛?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,249評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤担扑,失蹤者是張志新(化名)和其女友劉穎恰响,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體涌献,經(jīng)...
    沈念sama閱讀 45,696評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡胚宦,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,888評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了燕垃。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片枢劝。...
    茶點(diǎn)故事閱讀 40,013評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖卜壕,靈堂內(nèi)的尸體忽然破棺而出您旁,到底是詐尸還是另有隱情,我是刑警寧澤轴捎,帶...
    沈念sama閱讀 35,731評(píng)論 5 346
  • 正文 年R本政府宣布鹤盒,位于F島的核電站,受9級(jí)特大地震影響侦副,放射性物質(zhì)發(fā)生泄漏昨悼。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,348評(píng)論 3 330
  • 文/蒙蒙 一跃洛、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧终议,春花似錦汇竭、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,929評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至皂甘,卻和暖如春玻驻,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背偿枕。 一陣腳步聲響...
    開封第一講書人閱讀 33,048評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工璧瞬, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人渐夸。 一個(gè)月前我還...
    沈念sama閱讀 48,203評(píng)論 3 370
  • 正文 我出身青樓嗤锉,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親墓塌。 傳聞我的和親對(duì)象是個(gè)殘疾皇子瘟忱,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,960評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • 轉(zhuǎn)載 原文的排版和內(nèi)容都更加友好,并且詳細(xì),我只是在這里貼出了一部分留作自己以后參考和學(xué)習(xí),如希望更詳細(xì)了解AWK...
    XKirk閱讀 3,218評(píng)論 2 25
  • awk介紹awk變量printf命令:實(shí)現(xiàn)格式化輸出操作符awk patternawk actionawk數(shù)組aw...
    哈嘍別樣閱讀 1,567評(píng)論 0 4
  • linux資料總章2.1 1.0寫的不好抱歉 但是2.0已經(jīng)改了很多 但是錯(cuò)誤還是無(wú)法避免 以后資料會(huì)慢慢更新 大...
    數(shù)據(jù)革命閱讀 12,168評(píng)論 2 33
  • 本章主要學(xué)習(xí)內(nèi)容awk介紹 ?awk基本用法 ?awk變量 ?awk格式化 ?awk操作符 ?awk條件判斷 ?a...
    楠人幫閱讀 1,271評(píng)論 0 8
  • awk:報(bào)告生成器奥额,格式化文本輸出 內(nèi)容: awk介紹 awk基本用法 awk變量 awk格式化 awk操作符 a...
    BossHuang閱讀 1,457評(píng)論 0 9