Shell脚本正则表达式中awk、sort、uniq怎么用-创新互联-成都快上网建站

Shell脚本正则表达式中awk、sort、uniq怎么用-创新互联

这篇文章主要为大家展示了“Shell脚本正则表达式中awk、sort、uniq怎么用”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Shell脚本正则表达式中awk、sort、uniq怎么用”这篇文章吧。

专注于为中小企业提供网站设计、成都网站建设服务,电脑端+手机端+微信端的三站合一,更高效的管理,为中小企业紫云免费做网站提供优质的服务。我们立足成都,凝聚了一批互联网行业人才,有力地推动了1000+企业的稳健成长,帮助中小企业通过网站建设实现规模扩充和转变。

awk工具

在Linux/UNIX系统中,awk是一个功能强大的编辑工具,逐行读取输入文本,并根据指定的匹配模式进行查找,对符合条件的内容进行格式化输出或者过滤处理,可以再无交互的情况下实现相当复杂的文本操作,被广泛应用于Shell脚本,完成各种自动化配置任务。

1.awk常见用法:
通常情况下 awk 所使用的命令格式如下所示,其中,单引号加上大括号“{}”用于设置对数据进行的处理动作。awk 可以直接处理目标文件,也可以通过“-f”读取脚本对目标文件进行处理。

Demo1:

查出/etc/passwd的用户名等列,执行如下命令

[root@localhost ~]# awk -F ':' '{print $1,$3,$4}' /etc/passwd
root 0 0
bin 1 1
daemon 2 2
//以下省略多行
awk 包含几个特殊的内建变量(可直接用)如下所示:
FS:指定每行文本的字段分隔符,默认为空格或制表位。
NF:当前处理的行的字段个数。
NR:当前处理的行的行号(序数)。
$0:当前处理的行的整行内容。
$n:当前处理行的第 n 个字段(第 n 列)。
FILENAME:被处理的文件名。
RS:数据记录分隔,默认为\n,即每行为一条记录。

按行输出文本:

[root@localhost ~]# awk 'NR==1,NR==3{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

[root@localhost ~]# awk -F ":" 'NR==1,NR==3{print $1,$3}' /etc/passwd
root 0
bin 1
daemon 2

[root@localhost ~]# awk -F ":" '(NR>=1)&&(NR<=3){print $1,$3}' /etc/passwd
root 0
bin 1
daemon 2
输出所有奇偶行的内容:
奇数行:
[root@localhost ~]# awk -F ":" 'NR%2==1{print $1,$3}' /etc/passwd
root 0
daemon 2
lp 4
shutdown 6
mail 8
games 12
nobody 99
dbus 81
abrt 173
rpc 32
saslauth 996
pulse 171
rpcuser 29
ntp 38
usbmuxd 113
qemu 107
setroubleshoot 993
gdm 42
sshd 74
postfix 89
zhou 1000
named 25
偶数行:
[root@localhost ~]# awk -F ":" 'NR%2==0{print $1,$3}' /etc/passwd
bin 1
adm 3
sync 5
halt 7
operator 11
ftp 14
systemd-network 192
polkitd 999
libstoragemgmt 998
colord 997
rtkit 172
chrony 995
nfsnobody 65534
tss 59
geoclue 994
radvd 75
sssd 992
gnome-initial-setup 991
avahi 70
tcpdump 72
dhcpd 177
输出以root开头的行:
[root@localhost ~]# awk '/^root/{print}' /etc/passwd
root:x:0:0:root:/root:/bin/bash
统计以/bin/bash结尾的行数:
[root@localhost ~]# awk 'BEGIN {x=0} ; /\/bin\/bash$/{x++};END {print x}' /etc/passwd
2
统计以空行分隔的文本段落数:
[root@localhost opt]# vim name.txt
zhangsan:lisi:wangwu
zhaoliu:liuliu
heiba:heihei
[root@localhost opt]# awk 'BEGIN{RS=":"};END{print NR}' /opt/name.txt
5
//统计规则:遇到关键符号,折行
字段输出:
[root@localhost opt]# awk -F ":" '$3=="0"{print}' /etc/passwd
root:x:0:0:root:/root:/bin/bash

[root@localhost opt]# awk -F ":" '$3=="0"{print $1,$7}' /etc/passwd
root /bin/bash

输出密码为空的用户的shadow记录:
[root@localhost opt]# awk 'BEGIN{FS=":"};$3=="0"{print}' /etc/passwd
root:x:0:0:root:/root:/bin/bash

输出以冒号分隔且第7个字段包含bash:
[root@localhost opt]# awk -F : '$7~"bash"{print}' /etc/passwd
root:x:0:0:root:/root:/bin/bash
zhou:x:1000:1000:zhou:/home/zhou:/bin/bash

以冒号为分隔,输出第一个字段包含nfs且总字段数为7的第1,3,7字段
方法一:[root@localhost opt]# awk -F : '($1~"nfs")&&(NF==7){print $1,$3,$7}' /etc/passwd
nfsnobody 65534 /sbin/nologin
方法二:[root@localhost opt]# awk 'BEGIN{FS=":"};($1~"nfs")&&(NF==7){print $1,$3,$7}' /etc/passwd
nfsnobody 65534 /sbin/nologin

以冒号为分隔,第七个字段不包含/sbin/nologin且总字段为7的,1,3,7字段
[root@localhost opt]# awk 'BEGIN{FS=":"};($7!="/sbin/nologin")&&(NF==7){print $1,$3,$7}' /etc/passwd
root 0 /bin/bash
sync 5 /bin/sync
shutdown 6 /sbin/shutdown
halt 7 /sbin/halt
zhou 1000 /bin/bash
named 25 /bin/false
调用wc -l 命令统计使用bash 的用户个数:
[root@localhost opt]# awk -F : '/bash$/{print | "wc -l"}' /etc/passwd
2
调用w 命令,并用来统计在线用户数:
[root@localhost opt]# awk 'BEGIN {while ("w" | getline) n++;{print n-2}}'
1
调用hostname,并输出当前的主机名:
[root@localhost opt]# awk 'BEGIN {"hostname" | getline ; print $0}'
localhost.localdomain

sort工具

在 Linux 系统中,常用的文件排序工具有三种:sort、uniq、wc, 其中sort 是一个以行为单位对文件内容进行排序的工具,也可以根据不同的数据类型来排序。例如数据和字符的牌局就不一样。sort 命令的语法为“sort [选项] 参数”,其中常用的选项包括以下几种。

-f:忽略大小写

-b:忽略每行前面的空格

-M:按照月份进行排序

-n:按照数字进行排序

-r:反向排序

-u:等同于 uniq,表示相同的数据仅显示一行

-t:指定分隔符,默认使用[Tab]键分隔

-o <输出文件>:将排序后的结果转存至指定文件

-k:指定排序区域

uniq工具

Uniq 工具在 Linux 系统中通常与 sort 命令结合使用,用于报告或者忽略文件中的重复行。具体的命令语法格式为:uniq [选项] 参数。其中常用选项包括以下几种。

-c:进行计数

-d:仅显示重复行

-u:仅显示出现一次的行

以上是“Shell脚本正则表达式中awk、sort、uniq怎么用”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注创新互联行业资讯频道!

另外有需要云服务器可以了解下创新互联cdcxhl.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。


网站题目:Shell脚本正则表达式中awk、sort、uniq怎么用-创新互联
网站URL:http://kswjz.com/article/dijhhe.html
扫二维码与项目经理沟通

我们在微信上24小时期待你的声音

解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流