中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

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

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

shell三劍客之awk(包括sort排序和uniq工具)

發布時間:2020-07-26 06:33:03 來源:網絡 閱讀:979 作者:23trl 欄目:云計算

shell三劍客之awk(包括sort排序和uniq工具)

shell三劍客之awk

在 Linux/UNIX 系統中,awk 是一個功能強大的編輯工具,逐行讀取輸入文本,并根據指定的匹配模式進行查找,對符合條件的內容進行格式化輸出或者過濾處理,可以在無交互的情況下實現相當復雜的文本操作,被廣泛應用于 Shell 腳本,完成各種自動化配置任務。

awk 所使用的命令格式如下所示,其中,單引號加上大括號“{}”用于設置對數據進行的處理動作。awk 可以直接處理目標文件,也可以通過“-f”讀取腳本對目標文件進行處理。

awk工具命令格式

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,即每行為一條記錄。

一.awk用法

(1)輸出所有內容,等同于 cat chen.txt,

[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.

(2)輸出第 1~3 行內容

[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

(3)輸出所有奇數行的內容

[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

(4)輸出所有偶數行的內容

[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

(5)輸出所有偶數行的內容

awk '/^The/{print}' chen.txt
 THE
THEASDHAS

(6)輸出以limit.結尾的行

[root@localhost ~]# awk '/limit.$/{print}' chen.txt
Use graphical install limit.

(7)統計以/bin/bash 結尾的行數,等同于greo -c “/bin/bash” chen.txt

[root@localhost ~]# awk 'BEGIN {x=0} ; /\/bin\/bash$/{x++};END{print x}' /etc/passwd

(8)統計以the分隔的文本段落數

[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

(1)輸出每行中的第1,3個字段

[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

(2)輸出密碼為“*”的用戶的shadow 記錄

[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:::

(3)輸出以冒號分隔且第 7 個字段中包含/bash 的行的第 1 個字段

[root@localhost ~]# awk '($1~"nfs")&&(NF=7){print $1,$2}' /etc/passwd
nfsnobody:x:65534:65534:Anonymous NFS

(4)輸出第 7 個字段既不為/bin/bash 也不為/sbin/nologin 的所有行

[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

(二)通過管道,雙引號調用shell命令

調用wc -l 命令統計使用bash 的用戶個數,等同于 grep -c “bash$” /etc/passwd

[root@localhost ~]# awk -F : '/bash$/{print | "wc -l"}' /etc/passwd
2

(1)調用w 命令,并用來統計在線用戶數

[root@localhost ~]# awk 'BEGIN {while ("w" | getline) n++ ;{print n-2}}'
2

(2)調用hostname,并輸出當前的主機名

[root@localhost ~]# awk 'BEGIN {"hostname" | getline ; print $0}'
localhost.localdomain

三.sort 工具

sort 是一個以行為單位對文件內容進行排序的工具,也可以根據不同的數據類型來排序。例如數據和字符的牌局就不一樣。sort 命令的語法為“sort [選項] 參數”,其中常用的選項包括以下幾種。
(1)-f:忽略大小寫;
(2)-b:忽略每行前面的空格;
(3)-M:按照月份進行排序;
(4)-n:按照數字進行排序;
(5)-r:反向排序;
(6)-u:等同于 uniq,表示相同的數據僅顯示一行;
(7)-t:指定分隔符,默認使用[Tab]鍵分隔;
(8)-o <輸出文件>:將排序后的結果轉存至指定文件;
(9)-k:指定排序區域。

1:將/etc/passwd 文件中的賬號進行排序。

排序規則是開頭按字母排序,如果開頭都是一樣的就按照第二個字母從小到大

[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

(1)將/etc/passwd 文件中第三列進行反向排序

[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

(2)將/etc/passwd 文件中第三列進行排序,并將輸出內容保存至user.txt 文件中

[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工具

Uniq 工具在 Linux 系統中通常與 sort 命令結合使用,用于報告或者忽略文件中的重復行。具體的命令語法格式為:uniq [選項] 參數。其中常用選項包括以下幾種。
(1)-c:進行計數;
(2)-d:僅顯示重復行;
(3)-u:僅顯示出現一次的行;

1:刪除 a 文件中的重復行。

[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

uniq工具刪除重復但是只刪除連續重復的

(2)刪除 a 文件中的重復行,并在行首顯示該行重復出現的次數

[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 

(3)查找 testfile 文件中的重復行。

[root@localhost ~]# uniq -d a.txt
centos7 6.2
centos7 6.2

謝謝收看

向AI問一下細節

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

AI

高陵县| 高唐县| 澎湖县| 陆河县| 青川县| 三穗县| 诏安县| 白山市| 临漳县| 咸宁市| 阜新| 鹤峰县| 锦州市| 玛曲县| 黔江区| 如皋市| 保康县| 双鸭山市| 丰县| 新龙县| 商南县| 油尖旺区| 定远县| 霍邱县| 土默特右旗| 清丰县| 周口市| 如东县| 张家口市| 富裕县| 海淀区| 巴里| 土默特左旗| 乌拉特中旗| 视频| 永仁县| 肇州县| 金秀| 凌海市| 邵阳县| 滦南县|