awk
AWK是一个优良的文本处理工具,Linux及Unix环境中现有的功能最强大的数据处理引擎之一。这种编程及数据操作语言(其名称得自于它的创始人阿尔佛雷德·艾侯、彼得·温伯格和布莱恩·柯林汉姓氏的首个字母)的最大功能取决于一个人所拥有的知识。awk经过改进生成的新的版本nawk,gawk,现在默认linux系统下日常使用的是gawk,用命令可以查看正在应用的awk的来源(ls -l /bin/awk )。擅长取列,可以过滤内容,特长:取列。默认以空格为分隔符。
$NF:表示最后一列。$(NF-1):倒数第二列。
$0:表示整行。
NR:表示行号。
&&(and):表示并且。
\n:回车换行。
简单例子:
[root@saltstack-client2 test]# cat awk.txt
oldboy oldgirl
ddd fff
[root@saltstack-client2 test]# awk '{print $1}' awk.txt
oldboy
ddd
[root@saltstack-client2 test]# awk '{print $2}' awk.txt
oldgirl
fff
例子:
打印/etc/passwd第一列的内容
[root@saltstack-client2 test]# cat /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
uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
gopher:x:13:30:gopher:/var/gopher:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
vcsa:x:69:69:virtual console memory owner:/dev:/sbin/nologin
rpc:x:32:32:Rpcbind Daemon:/var/cache/rpcbind:/sbin/nologin
abrt:x:173:173::/etc/abrt:/sbin/nologin
haldaemon:x:68:68:HAL daemon:/:/sbin/nologin
ntp:x:38:38::/etc/ntp:/sbin/nologin
saslauth:x:499:76:"Saslauthd user":/var/empty/saslauth:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
rpcuser:x:29:29:RPC Service User:/var/lib/nfs:/sbin/nologin
nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
tcpdump:x:72:72::/:/sbin/nologin
oprofile:x:16:16:Special user account to be used by OProfile:/home/oprofile:/sbin/nologin
nagios:x:1000:1000::/home/nagios:/bin/bash
tomcat:x:1002:1002::/data/tomcat/:/bin/bash
zabbix:x:498:498:Zabbix Monitoring System:/var/lib/zabbix:/sbin/nologin
mysql:x:27:27:MySQL Server:/var/lib/mysql:/bin/bash
[root@saltstack-client2 test]# awk -F ":" '{print $1}' /etc/passwd
root
bin
daemon
adm
lp
sync
shutdown
halt
uucp
operator
games
gopher
ftp
nobody
dbus
vcsa
rpc
abrt
haldaemon
ntp
saslauth
postfix
rpcuser
nfsnobody
sshd
tcpdump
oprofile
nagios
tomcat
zabbix
mysql
打印/etc/passwd最后一列的内容
[root@saltstack-client2 test]# awk -F ":" '{print $NF}' /etc/passwd
/bin/bash
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/bin/sync
/sbin/shutdown
/sbin/halt
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/bin/bash
/bin/bash
/sbin/nologin
/bin/bash
小练习,练习着玩 哈哈
[root@saltstack-client2 test]# awk -F ":" '{print $1"="$2"="$3}' /etc/passwd
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
operator=x=11
games=x=12
gopher=x=13
ftp=x=14
nobody=x=99
dbus=x=81
vcsa=x=69
rpc=x=32
abrt=x=173
haldaemon=x=68
ntp=x=38
saslauth=x=499
postfix=x=89
rpcuser=x=29
nfsnobody=x=65534
sshd=x=74
tcpdump=x=72
oprofile=x=16
nagios=x=1000
tomcat=x=1002
zabbix=x=498
mysql=x=27
awk多分隔符功能
例子:取出oldboy 49000448
[root@saltstack-server ~]# cat oldboy.txt
I am oldboy, myqq is 49000448
法一:
[root@saltstack-server ~]# sed 's#,# #g' oldboy.txt |cut -d " " -f3,7
oldboy 49000448
法二:(自己想的)
[root@saltstack-server ~]# cut -d " " -f3,6 oldboy.txt |awk -F "," '{print$1 $2}'
oldboy 49000448
awk多分割符的用法举例
法三:使用多分隔符:[ ]
[root@saltstack-server ~]# awk -F "[, ]" '{print $3 " " $7}' oldboy.txt -à以逗号,空格作为分割符。
oldboy 49000448
查看文件的行数(wc命令案例)
-l:查看文件的行数
-c:查看文件的字节数
-m:查看文件的字符数
记住-l就行!
查看文件行数例子
例子:
[root@saltstack-server ~]# cat oldboy.txt
I am oldboy, myqq is 49000448
[root@saltstack-server ~]# wc -l oldboy.txt
1 oldboy.txt
[root@saltstack-server ~]# wc -l /etc/services
10774 /etc/services
查看某个服务是否开启
查看下SSH服务是否开启:
[root@saltstack-server ~]# netstat -lntup|grep ssh
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1571/sshd
查看进程数(企业案例常见)
[root@saltstack-server ~]# netstat -lntup|grep ssh|wc -l
1
过滤多个字符串
例子:
[root@saltstack-server ~]# grep -E "3306|1521" /etc/services
mysql 3306/tcp # MySQL
mysql 3306/udp # MySQL
ncube-lm 1521/tcp # nCube License Manager
ncube-lm 1521/udp # nCube License Manager
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· .NET Core 中如何实现缓存的预热?
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
· 【译】Visual Studio 中新的强大生产力特性