您好,登錄后才能下訂單哦!
在 Linux/UNIX 系統中,awk 是一個功能強大的編輯工具,逐行讀取輸入文本,并根據指定的匹配模式進行查找,對符合條件的內容進行格式化輸出或者過濾處理,可以在無交互的情況下實現相當復雜的文本操作,被廣泛應用于 Shell 腳本,完成各種自動化配置任務。
awk 所使用的命令格式如下所示,其中,單引號加上大括號“{}”用于設置對數據進行的處理動作。awk 可以直接處理目標文件,也可以通過“-f”讀取腳本對目標文件進行處理。
awk 選項 '模式或條件 {編輯指令}' 文件 1 文件 2 ? //過濾并輸出文件符條件的內容
awk -f 腳本文件 文件 1 文件 2 ? //從腳本中調用編輯指令,過濾并輸出內容
7
awk 比較傾向于將一行分成多個“字段”然后再進行處理,且默認情況下字段的分隔符為空格或者 tab 鍵。awk 執行結果可以通過 print 的功能將字段數據打印顯示。在使用 awk 命令的過程中,可以使用邏輯操作符“&&”,表示“與”, “||”表示“或”,“!”表示“非”;還可以進行簡單的數學運算,如+、-、*、/、%、^分別 表示加、減、乘、除、取余和乘方。
找出/etc/passwd 的用戶名、用戶 ID、組 ID 等列, 執行以下 awk 命令即可。
[root@localhost ~]# awk -F : '{print $1,$3,$4}' /etc/passwd
root 0 0
bin 1 1
daemon 2 2
adm 3 4
lp 4 7
sync 5 0
shutdown 6 0
halt 7 0
mail 8 12
operator 11 0
games 12 100
ftp 14 50
nobody 99 99
systemd-network 192 192
dbus 81 81
polkitd 999 998
abrt 173 173
libstoragemgmt 998 996
rpc 32 32
colord 997 995
saslauth 996 76
rtkit 172 172
pulse 171 171
chrony 995 991
rpcuser 29 29
nfsnobody 65534 65534
ntp 38 38
tss 59 59
usbmuxd 113 113
geoclue 994 989
qemu 107 107
radvd 75 75
setroubleshoot 993 988
sssd 992 987
gdm 42 42
gnome-initial-setup 991 986
sshd 74 74
avahi 70 70
postfix 89 89
tcpdump 72 72
chen 1000 1000
awk 從輸入文件或者標準輸入中讀入信息,與 sed 一樣,信息的讀入也是逐行讀取的。不同的是 awk 將文本文件中的一行視為一個記錄,而將一行中的某一部分(列)作為記錄中的一個字段(域)。為了操作這些不同的字段,awk 借用 shell 中類似于位置變量的方法, 用$1、$2、$3?順序地表示行(記錄)中的不同字段。另外 awk 用$0 表示整個行(記錄)。不同的字段之間是通過指定的字符分隔。awk 默認的分隔符是空格。awk 允許在命令行中用“-F 分隔符”的形式來指定分隔符。
awk 包含幾個特殊的內建變量(可直接用)如下所示:
(1)FS:指定每行文本的字段分隔符,默認為空格或制表位。
(2)NF:當前處理的行的字段個數。
(3)NR:當前處理的行的行號(序數)。
(4)$0:當前處理的行的整行內容。
(6)FILENAME:被處理的文件名。
(7)RS9:數據記錄分隔,默認為\n,即每行為一條記錄。
[root@localhost ~]# awk '{print $0}' chen.txt
[root@localhost ~]# awk '{print}' chen.txt //這條命令和上面一條是一樣的效果
#version=DEVEL
#System authorization information
aulth --enableshadow --passalgo=sha512
#Use CDROM installation media
cdlrom.
thethethe.
[root@localhost ~]# awk 'NR==1,NR==3{print}' chen.txt //這條命令和下面命令是一樣的效果
[root@localhost ~]# awk '(NR>=1)&&(NR<=3){print}' chen.txt
#version=DEVEL
#System authorization information
aulth --enableshadow --passalgo=sha512
[root@localhost ~]# awk '(NR%2)==1{print}' chen.txt
Use CDROM installation media
cdrom.
thethethe.
THE
THEASDHAS
Use graphical install.
graphical.
best
test
ASSDJFXYxyzC
AxyzxyzxyzC
keyboard --vckeymap=cn --xlayouts='cn'
System language
[root@localhost ~]# awk '(NR%2)==0{print}' chen.txt
Use graphical install.
graphical.
best
test
ASSDJFXYxyzC
AxyzxyzxyzC
keyboard --vckeymap=cn --xlayouts='cn'
System language
lang zh_CN.UTF-8
Network information
network --bootproto=dhcp --device=ens33 --onboot=off --ipv6=auto --no-activate
network --hostname=localhost.localdomain
Root password
rootpw --iscrypted $6$L.egxzosoP/0k9Nj$wna7vPXZjeH0jFcNZUymYKF8ySXq5HxQuvxTFxIpEAAxuDj7MQJtXBds5E0LxAftI1H5JbJuYpN44d5n6t1AZ.
System services
awk '/^The/{print}' chen.txt
THE
THEASDHAS
[root@localhost ~]# awk '/limit.$/{print}' chen.txt
Use graphical install limit.
[root@localhost ~]# awk 'BEGIN {x=0} ; /\/bin\/bash$/{x++};END{print x}' /etc/passwd
[root@localhost ~]# awk 'BEGIN {RS="the"};END{print NR}' chen.txt
[root@localhost ~]# awk -F : '{print $3}' /etc/passwd
0
1
2
3
4
5
6
7
8
9
10
11
[root@localhost ~]# awk -F : '{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-network 192
[root@localhost ~]# awk -F : '$2== "*"{print}' /etc/shadow
bin:*:17110:0:99999:7:::
daemon:*:17110:0:99999:7:::
adm:*:17110:0:99999:7:::
lp:*:17110:0:99999:7:::
sync:*:17110:0:99999:7:::
shutdown:*:17110:0:99999:7:::
halt:*:17110:0:99999:7:::
mail:*:17110:0:99999:7:::
operator:*:17110:0:99999:7:::
games:*:17110:0:99999:7:::
[root@localhost ~]# awk '($1~"nfs")&&(NF=7){print $1,$2}' /etc/passwd
nfsnobody:x:65534:65534:Anonymous NFS
[root@localhost ~]# awk -F : '($7!="/bin/bash")&&($7!="/sbin/nologin")' /etc/passwd
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
[root@localhost ~]# awk -F : '/bash$/{print | "wc -l"}' /etc/passwd
2
[root@localhost ~]# awk 'BEGIN {while ("w" | getline) n++ ;{print n-2}}'
2
[root@localhost ~]# awk 'BEGIN {"hostname" | getline ; print $0}'
localhost.localdomain
sort 是一個以行為單位對文件內容進行排序的工具,也可以根據不同的數據類型來排序。例如數據和字符的牌局就不一樣。sort 命令的語法為“sort [選項] 參數”,其中常用的選項包括以下幾種。
(1)-f:忽略大小寫;
(2)-b:忽略每行前面的空格;
(3)-M:按照月份進行排序;
(4)-n:按照數字進行排序;
(5)-r:反向排序;
(6)-u:等同于 uniq,表示相同的數據僅顯示一行;
(7)-t:指定分隔符,默認使用[Tab]鍵分隔;
(8)-o <輸出文件>:將排序后的結果轉存至指定文件;
(9)-k:指定排序區域。
排序規則是開頭按字母排序,如果開頭都是一樣的就按照第二個字母從小到大
[root@localhost ~]# sort /etc/passwd
abrt:x:173:173::/etc/abrt:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
avahi:x:70:70:Avahi mDNS/DNS-SD Stack:/var/run/avahi-daemon:/sbin/nologin
bin:x:1:1:bin:/bin:/sbin/nologin
chen:x:1000:1000:chen:/home/chen:/bin/bash
chrony:x:995:991::/var/lib/chrony:/sbin/nologin
colord:x:997:995:User for colord:/var/lib/colord:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
[root@localhost ~]# sort -t : -rk 3 /etc/passwd
nobody:x:99:99:Nobody:/:/sbin/nologin
polkitd:x:999:998:User for polkitd:/:/sbin/nologin
libstoragemgmt:x:998:996:daemon account for libstoragemgmt:/var/run/lsm:/sbin/nologin
colord:x:997:995:User for colord:/var/lib/colord:/sbin/nologin
saslauth:x:996:76:Saslauthd user:/run/saslauthd:/sbin/nologin
chrony:x:995:991::/var/lib/chrony:/sbin/nologin
geoclue:x:994:989:User for geoclue:/var/lib/geoclue:/sbin/nologin
setroubleshoot:x:993:988::/var/lib/setroubleshoot:/sbin/nologin
sssd:x:992:987:User for sssd:/:/sbin/nologin
gnome-initial-setup:x:991:986::/run/gnome-initial-setup/:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
[root@localhost ~]# sort -t : -k 3 /etc/passwd -o chench.txt
[root@localhost ~]# cat chench.txt
root:x:0:0:root:/root:/bin/bash
chen:x:1000:1000:chen:/home/chen:/bin/bash
qemu:x:107:107:qemu user:/:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
usbmuxd:x:113:113:usbmuxd user:/:/sbin/nologin
bin:x:1:1:bin:/bin:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
pulse:x:171:171:PulseAudio System Daemon:/var/run/pulse:/sbi
Uniq 工具在 Linux 系統中通常與 sort 命令結合使用,用于報告或者忽略文件中的重復行。具體的命令語法格式為:uniq [選項] 參數。其中常用選項包括以下幾種。
(1)-c:進行計數;
(2)-d:僅顯示重復行;
(3)-u:僅顯示出現一次的行;
[root@localhost ~]# cat a.txt
centos7 6.2
centos7 6.2
centos7 6.2
centos7 6.2
centos7 6.2
centos7 6.6
centos7 6.2
centos7 6.2
centos7 6.3
centos7 6.5
linux 1
linux 2
linux 3
linux 4
linux 5
linux 6
[root@localhost ~]# uniq a.txt
centos7 6.2
centos7 6.6
centos7 6.2
centos7 6.3
centos7 6.5
linux 1
linux 2
linux 3
linux 4
linux 5
linux 6
[root@localhost ~]# uniq -c a.txt
1
5 centos7 6.2
1 centos7 6.6
2 centos7 6.2
1 centos7 6.3
1 centos7 6.5
1 linux 1
1 linux 2
1 linux 3
1 linux 4
1 linux 5
1 linux 6
1
[root@localhost ~]# uniq -d a.txt
centos7 6.2
centos7 6.2
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。