首页 > 系统相关 >linux之awk

linux之awk

时间:2024-11-17 17:08:32浏览次数:1  
标签:bin sbin nologin m01 awk linux root

awk命令

  • 取行
  • 取列
  • 模糊匹配
  • 判断比较
  • 字符串比对
  • 数字比对
  • 支持
  • 格式化输出

1.语法结构

sed -n '3p' file
awk 'NR==3' file

NR awk的内置变量 存储着每行的行号
符号
== 等于第几行
>  大于第几行
>= 大于等于第几行
<  小于第几行
<= 小于等于第几行
!= 不等
&& 并且 类似sed的 1,3
|| 或者 

awk默认就是输出的动作 如果只输出则不需要加print

[root@m01 ~]# awk 'NR==2' passwd 
bin:x:1:1:bin:/bin:/sbin/nologin
[root@m01 ~]# awk 'NR==2{print}' passwd 
bin:x:1:1:bin:/bin:/sbin/nologin
# awk取出文件大于7的行 
# NR>7 NR<7 NR==7 NR!=7
[root@m01 ~]# awk  'NR>7' passwd
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin

2.模糊过滤

语法结构: 支持正则
	    sed -n '//p' file
	    awk '//' file    # 模糊查找文件中的字符串
	    awk '//,//' file # 区间范围
	    
	    
# 过滤包含root的行
[root@m01 ~]# awk '/root/' passwd 
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin

# 找出以a开头的行
[root@m01 ~]# awk '/^a/' passwd 
adm:x:3:4:adm:/var/adm:/sbin/nologin
abrt:x:173:173::/etc/abrt:/sbin/nologin

# 找出文件中包含root或者adm的行
[root@m01 ~]# awk '/root|adm/' passwd 
root:x:0:0:root:/root:/bin/bash
adm:x:3:4:adm:/var/adm:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin

# 查找出以s或者b开头的行
[root@m01 ~]# awk '/^[sb]/' passwd 
bin:x:1:1:bin:/bin:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin

# 按照区间过滤 过滤日志中的时间范围
[root@m01 ~]# awk '/adm/,/ftp/' passwd 
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
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin

# 查找以h结尾的行号
[root@m01 ~]# awk '/h$/' passwd 
root:x:0:0:root:/root:/bin/bash
usera:x:1000:1000::/home/usera:/bin/bash
user1:x:1001:1001::/home/user1:/bin/bash
user2:x:1002:1002::/home/user2:/bin/bash
user3:x:1003:1003::/home/user3:/bin/bash
userb:x:1004:1004::/home/userb:/bin/bash
userc:x:1005:1005::/home/userc:/bin/bash    

3.awk取列

语法结构:
		 awk '{print $1}' file # 取出文件中的第1列
		 
默认按照空格或者tab键分隔成列
如果没有空格或者tab键,awk会将整行看成一列
在awk中一切在动作中的字符串都被看做是变量,加上双引号则视为普通的字符串

awk内置变量
$0  # 表示整行
$1  # 表示文件的第1列 
$2  # 表示文件的第2列
,   # 逗号表示空格
NF  # 表示每一行最后一列的列号

# 取出文件中的第一列
[root@m01 ~]# awk -F ":" '{print $1}' passwd 
root
bin
daemon
adm
lp

# 取出文件的第1列和第3列
[root@m01 ~]# awk -F ":" '{print $1,$3}' passwd |column -t
root             0
bin              1
daemon           2
adm              3
lp               4

4.awk数值运算

# 取出文件中倒数第一列,和第二列
[root@m01 ~]# awk -F ":" '{print $NF,$(NF-1)}' passwd 
/bin/bash /root
/sbin/nologin /bin
/sbin/nologin /sbin
/sbin/nologin /var/adm

5.awk指定分隔符

语法结构:
	     awk -F: '{print $1}'    # 第一种指定分隔符方法
	     awk -F ":" '{print $1}' # 第二种指定分隔符方法
	     awk -F "[:/]"
	     awk -F ":|/"     

6.awk模式+动作

模式: 通过NR找出指定的行  awk 'NR==5'
	 通过模糊过滤的方式找出行 awk '/root/'
awk 'NR==5{print $1}'

# 输出文件中第2行的第2列
[root@m01 ~]# awk -F ":" 'NR==2{print $2}' passwd 
x

# 输出文件中的大于第2行的最后一列内容
[root@m01 ~]# awk -F ":" 'NR>2{print $2}' passwd 
x
x
x
x

# 输出包含adm的行的 第3列
[root@m01 ~]# awk -F ":" '/adm/{print $3}' passwd 
3

7.awk比较表达式

  • 按照字符比对查找行
# 查找文件中第1列等于root的行
[root@m01 ~]# awk -F ":" '$1=="root"' passwd 
root:x:0:0:root:/root:/bin/bash

# 使用正则匹配字符串 提取第1列包含a的行
[root@m01 ~]# awk -F ":" '$1 ~ "a"' passwd 
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
abrt:x:173:173::/etc/abrt:/sbin/nologin
usera:x:1000:1000::/home/usera:/bin/bash

# 匹配最后一列以n结尾的行
[root@m01 ~]# awk -F ":" '$NF ~ "h$"' passwd 
root:x:0:0:root:/root:/bin/bash
usera:x:1000:1000::/home/usera:/bin/bash

# 对root的行进行取反 第1列不包含root的行
[root@m01 ~]# awk -F ":" '$1 != "root"' passwd 
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin

# 提取第1列不是以r开头的行
[root@m01 ~]# awk -F ":" '$1 !~ "^r"' passwd 
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin

8.awk数字比对

# 第3列等于0的行
[root@m01 ~]# awk -F ":" '$3==0' passwd 
root:x:0:0:root:/root:/bin/bash

# 第3列小于5的行
[root@m01 ~]# awk -F ":" '$3<5' 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

# 提取第3列 大于5小于10的行
[root@m01 ~]# awk -F ":" '$3>5&&$3<10' passwd 
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

# 提取第3列的第二行 在开始加上uid 结束加上 over
[root@m01 ~]# awk -F ":" 'BEGIN{print "==uid=="}NR==2{print $3}END{print "==over=="}' passwd 
==uid==
1
==over==

9.总结

1.awk取行  *****
awk 'NR==3' file
df -h|awk 'NR==5'
NR==3
NR!=3
NR>3
NR>=3
NR<3
NR<=3
&&
awk 'NR>3&&NR<6' file
||
awk 'NR==5||NR>8' file

2.awk模糊过滤  *****
awk '//' file
awk '//,//' file # 区间范围
awk '/^/' file  # 支持正则  ^ $ | []

3.awk取列  *****
默认空格tab键为分隔符
$1 $2
awk '{print $1}' file
awk '{print $1,$2}' file
awk '{print $NF}' file  # 取出文件中最后一列
awk '{print $(NF-1)}' file # 取出文件中倒数第2列


4.awk指定分隔符 *****
awk -F
awk -F:
awk -F ":" '{print $1}' file
awk -F "[:/]" 指定任意单个
awk -F "[:/]+" 前字符出现连续1一次及以上作为1个字符串
awk -Fa  # 指定a为分隔符

5.awk模式+动作 ***** 
awk 'NR==3{print $1}' # 第3行的第1列
awk 'NR>3&&NR<6{print $NF}' # 取出文件中大于3小于6行的最后一列
awk '/root/{print $1,$NF}' # 将包含root行的第1列和最后一列
awk '$3>3{print $3}'  # 大于3的行的第3列


6.awk数值比对 字符串比对 *****
awk '$3==0'
awk '$3>0'
awk '$3>80'
awk '$3<60'  #统计不及格的

awk -F: '$1=="root"' 
awk -F: '$1 ~ /^r/'
awk -F: '$NF ~ /n$/'

标签:bin,sbin,nologin,m01,awk,linux,root
From: https://www.cnblogs.com/sharecorner/p/18550755

相关文章

  • linux之sed
    sed参数取行grep参数grep参数选项-v#取反-r#递归过滤文件内容从目录中递归查找-w#过滤的内容两边必须是空格-E#支持扩展正则egrep-i#不区分大小写-n#过滤到内容行号-c#统计单词出现的次数-o#匹配过程-A#过滤到内容往......
  • Linux基础+基本病毒编写
    **免责声明**学习视频来自B站up主泷羽sec,如涉及侵权马上删除文章。笔记的只是方便各位师傅学习知识,以下代码、网站只涉及学习内容,其他的都与本人无关,切莫逾越法律红线,否则后果自负。B站地址:泷羽sec的个人空间-泷羽sec个人主页-哔哩哔哩视频一:opensslopenssl是一个开源的......
  • 网络安全之Linux基础
    目录文件管理创建空文件删除文件新建目录删除目录重命名文件移动文件软链接(SymbolicLink)硬链接(HardLink)搜索文件基本语法优点缺点基本语法常用选项示例注意事项功能基本语法常用选项示例输出解释注意事项功能基本语法常用选项示例输出解释注意......
  • 使用 ESP-IDF 进行esp32-c3开发第二步:Linux 和 macOS 平台工具链的标准设置
    先上文档,后面实践Linux和macOS平台工具链的标准设置[English]详细安装步骤请根据下方详细步骤,完成安装过程。设置开发环境以下是为ESP32-C3设置ESP-IDF的具体步骤。第一步:安装准备第二步:获取ESP-IDF第三步:设置工具第四步:设置环境变量第五步:开始使用ES......
  • 【Linux】信号
    文章目录概要整体架构流程信号的发送与接收信号的处理技术名词解释信号分析查看信号信号的产生方式键盘产生信号终端按键产生信号系统函数向进程发信号软件条件产生信号硬件异常产生信号信号处理函数忽略信号自定义处理函数信号的执行流程小结概要Linux信号是一......
  • 对比 win32 linux原生 和 qt 的 所有 socket api
    以下是Win32原生、Linux原生和Qt的SocketAPI对比,包括TCP和UDP的功能、特性及优缺点。我们从核心API、特性、性能和常见应用等方面进行分析。1.核心API对比1.1Socket创建与初始化操作Win32(原生)Linux(原生)Qt(跨平台)创建套接字socket()socket()......
  • ssh配置密钥登录linux
    1、生成sshkey示例ssh-keygen-trsa2、将生成的公钥内容拷贝到linux服务器的~/.ssh/authorized_keys如果是root用户,那就放在根目录的.ssh目录下,如果是其它用户,放置在用户目录的.ssh目录下3、在本机.ssh目录下,创建config文件,内容如下Hostdata01.rootHostNam......
  • 【Linux之权限】理论篇
    前言Linux的权限是我们学习Linux初期非常重要的基础知识,接下来我将通过一个系列【Linux之权限】,共三篇文章,对此进行较为全面和详细的解说。sudo情况:如果我们不是超级管理员,但是想执行一个权限级别比较高的指令,比如我们想以超级管理员的身份来创建一个文件,那么就:sudotou......
  • 这款信创CAD Linux与麒麟国产系统高效适配,荣获麒麟用户挚爱奖
    本文为CAD芯智库原创,未经允许请勿复制、转载!原文转自:www.xwzsoft.com/h-nd-493.html信创国产化发展至今已经陆续取得不少突破,作为工程建设/工业制造企业的核心设计/生产软件之一,CAD对国产信创操作系统、硬件设备的适配度发展也至关重要。对此,中望2016就开始投入CAD......
  • Linux 实例:配置 NTP 服务
    网络时间协议(NetworkTimeProtocol,NTP),用于同步网络中各个计算机的时间的协议。其用途是将计算机的时钟同步到世界协调时UTC。腾讯云提供了内网NTP服务器供腾讯云内网设备使用,对于非腾讯云设备,可以使用腾讯云提供的公网NTP服务器。操作场景ntpd(NetworkTimeProtocold......