Linux文本处理工具AWK使用解析

简介:

      在linux系统上有三大文本处理工具分别是:grep,sed,awk,这次主要来看看awk。

awk  option  ‘pattern'  file

-F    指定分隔符;

-v     申明自定义变量;

查看当前系统上,用户名和用户shell,输出分隔符为~.

# awk -F: 'BEGIN{OFS="~";print "UserName   Shell"}{print $1,$7}END{print "================end============="}' /etc/passwd

wKioL1OnkG2Te8bLAAHoqAr3-7g056.jpg

还可以在中间加入模式(pattern),指定只对以in字符结尾的行做处理。

# awk -F: 'BEGIN{OFS="~";print "UserName   Shell"}/in$/{print $1,$7}END{print "================end============="}' /etc/passwd

wKiom1OnkOzi04CKAAGVk9MVmA4087.jpg

显示当前系统上id号小于等于500的用户。(表达式匹配)

# awk -F: '$3<=500{print $1,$3}' /etc/passwd

wKiom1OnkfTysUq8AADz8_EeYe4797.jpg

显示当前系统上shell是/bin/bash的用户(模式匹配)

# awk -F: 'BEGIN{OFS=":";print "UserName  Shell"}$7~/bash/{print $1,$7}' /etc/passwd

wKioL1Onl2bjz1u4AADhHFbpQSY508.jpg

控制语句:

判断用户ID是否为0,如果是就输出用户名并说明是一个管理员用户,如果不是输出用户名,说明是一个普通用户。

# awk -F: '{if ($3==0) {print $1,"Administrator";} else {print  $1,"Common User"}}' /etc/passwd

wKioL1OnxgKSOvcjAAFwjsNQKlA986.jpg

统计下系统上有多少个id号大于500的用户

# awk -F: -v Sum=0 '{if ($3>=500) Sum++}END{print Sum}' /etc/passwd

wKiom1OnyD6yBqjXAABze-oENBI068.jpg

显示number.txt文件中,所以大于100的数值。

# awk  '{i=1;while (i<=NF) {if ($i>=100) print $i;i++}}' number.txt

wKioL1On2DPxRUTHAACNMVVAN1k595.jpg

do-while    至少执行一次循环体,不管条件满足与否。

# awk -F: '{i=4;do {print $i;i--}while (i>4)}' /etc/passwd

wKioL1On2s3THeYCAABwnCQ0Xxs231.jpg

遍历/etc/passwd  $1-$3数值,只输出字符数大于4的数据。

# awk -F: '{for(i=1;i<=3;i++){if (length($i)>=4){print $i}}}' /etc/passwd

wKioL1On3VizB9Q_AACb890E34E218.jpg

使用for显示number.txt文件中,所以大于100的数值。

# awk '{for (i=1;i<=NF;i++){if ($i>=100) {print $i}}}' number.txt

wKiom1On3qPwg7AiAACC6mKQAmo878.jpg

查看网络连接各个状态的次数

# netstat -tan | awk '/^tcp/{state[$NF]++}END{for ( S in state) print S,state[S]}'

wKioL1On5E_AS9BkAAG3w3BNjSI837.jpg

统计日志每个ip访问了多少次

# awk '{ip[$1]++}END{for ( A  in ip ) print  A,ip[A]}'  access_log

统计当前系统用户,每种shell各有多少个。

# awk -F: '{count[$NF]++}END{for (A in count )print A,count[A]}' /etc/passwd

wKioL1On57PwTWsFAAC6YdjgZnE778.jpg

awk的内置函数

split        将数据按分隔符切片保存至数组里

length     返回字符串的字符个数

查看当前每个IP连接,与连接次数。

# netstat -tan | awk '/:80/{split($5,client,":");IP[client[4]]++}END{for (A in IP) print A,IP[A]}'

wKioL1On9P-w0vu2AAFuwWg7z2Y078.jpg

就是数组和split函数这里难了

OK完成了

 


本文转自qw87112 51CTO博客,原文链接:http://blog.51cto.com/tchuairen/1429894


相关文章
|
4天前
|
Linux Shell 网络安全
LabVIEW NI Linux Real-Time深层解析
LabVIEW NI Linux Real-Time深层解析
10 0
|
2天前
|
人工智能 自然语言处理 机器人
销售利器大集结:13种智能销售工具全面解析
该文探讨了人工智能在销售领域的应用,测试了13款领先工具,如Zoho CRM、Email Subject Line Generator和ChatGPT Plus等,这些工具通过数据分析、自动化任务和智能交互提升销售效率。然而,使用AI也带来人机交互和数据安全的挑战。文章强调,结合人工智能和人类销售人员的优势是关键,同时应谨慎处理相关问题。
15 4
|
3天前
|
监控 Linux 数据处理
|
5天前
|
Linux 编译器 调度
xenomai内核解析--双核系统调用(二)--应用如何区分xenomai/linux系统调用或服务
本文介绍了如何将POSIX应用程序编译为在Xenomai实时内核上运行的程序。
22 1
xenomai内核解析--双核系统调用(二)--应用如何区分xenomai/linux系统调用或服务
|
5天前
|
算法 Linux 调度
xenomai内核解析--xenomai与普通linux进程之间通讯XDDP(一)--实时端socket创建流程
xenomai与普通linux进程之间通讯XDDP(一)--实时端socket创建流程
10 1
xenomai内核解析--xenomai与普通linux进程之间通讯XDDP(一)--实时端socket创建流程
|
5天前
|
Linux 调度 数据库
|
2月前
|
搜索推荐 Linux 开发工具
【Linux】深入理解awk命令
【Linux】深入理解awk命令
50 0
|
6月前
|
存储 Linux Shell
Linux awk命令
除了使用 sed 命令,Linux 系统中还有一个功能更加强大的文本数据处理工具,就是 awk。 曾有人推测 awk 命令的名字来源于 awkward 这个单词。其实不然,此命令的设计者有 3 位,他们的姓分别是 Aho、Weingberger 和 Kernighan,awk 就取自这 3 为大师姓的首字母。 和 sed 命令类似,awk 命令也是逐行扫描文件(从第 1 行到最后一行),寻找含有目标文本的行,如果匹配成功,则会在该行上执行用户想要的操作;反之,则不对行做任何处理。awk 命令的基本格式为: [root@localhost ~]# awk [选项] '脚本命令' 文件名
76 1
|
7月前
|
Unix 测试技术 Linux
软件测试|Linux三剑客之awk命令详解
软件测试|Linux三剑客之awk命令详解
71 0
|
9月前
|
Linux Perl
百度搜索:蓝易云【linux系统awk命令使用详解】
Awk是一种强大的文本处理工具,在Linux系统中广泛使用。它可以读取文件、处理数据并输出结果,通常与其他Linux命令一起使用。在本篇文章中,我们将详细讲解Awk的使用方法,帮助读者了解这个工具的基本原理和常见用法。
70 0