首页 > 其他分享 >awk命令

awk命令

时间:2024-11-14 16:57:58浏览次数:1  
标签:sbin kylin 命令 awk print root xu

awk

【1】、awk作用

1.取行
2.取列
3.模糊过滤
4.判断比较
字符串比对
数字比对
5.支持if for while 数组
6.格式化输出

GNU/AWK
编程语言

语法结构:
	    awk '模式'     file  # 默认就是输出 不需要加动作
		awk '模式+动作' file
	    其他命令的输出|作为awk命令的输入
	    df -h|awk 'NR==2'   

【2】、awk取行

语法结构:
		awk 'NR==3' file
NR awk的内置变量,存储着每行的行号
符号
== 等于第几行
>  大于第几行
>= 大于等于第几行
<  小于第几行
<= 小于等于第几行
!= 不等
&& 并且 类似sed的 1,3
|| 或者 
案例1:awk取出文件的第三行
[root@kylin-xu ~]# awk 'NR==3' passwd 
daemon:x:2:2:daemon:/sbin:/sbin/nologin

案例2:awk取出文件行数大于77的行
[root@kylin-xu ~]# awk 'NR>7' passwd 
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
root:x:11:0:operator:/root:/sbin/nologin

案例3:awk取出文件中行数小于3 的行
[root@kylin-xu ~]# awk 'NR<3' passwd 
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin

案例4:awk取出文中行数不等于1的行
[root@kylin-xu ~]# awk 'NR!=1' passwd 

案例5:查找大于3小于5的行
[root@kylin-xu ~]# awk 'NR>3&&NR<5' passwd 
adm:x:3:4:adm:/var/adm:/sbin/nologin

案例6:查找第3行或第5行
[root@kylin-xu ~]# awk 'NR==3||NR==5' passwd 
daemon:x:2:2:daemon:/sbin:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

【3】、awk模糊过滤

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

案例2:找出包含bash的行
[root@kylin-xu ~]# awk '/bash/' passwd 
root:x:0:0:root:/root:/bin/bash

案例3:找出以a开头的行
[root@kylin-xu ~]# awk '/^a/' passwd 
adm:x:3:4:adm:/var/adm:/sbin/nologin

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

案例5:查找中包含b或s开头的行
[root@kylin-xu ~]# awk '/^[bs]/' 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

案例6:过滤adm开头的行,到halt开头的行
[root@kylin-xu ~]# awk '/^adm/,/^halt/' 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

[root@kylin-xu ~]# df -h | awk '/run$/,/\/$/' 
tmpfs                    979M   22M  957M    3% /run
tmpfs                    979M     0  979M    0% /sys/fs/cgroup
/dev/mapper/klas-root     39G  3.7G   35G   10% /

【4】、awk取列

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

awk内置变量
$0  # 表示整行
$1  # 表示文件的第1列 
$2  # 表示文件的第2列
,   # 逗号表示空格
NF  # 表示每一行最后一列的列号
案例1:取出第一列
[root@kylin-xu ~]# awk '{print $1}' 4.txt 
a
d
a
a

案例2:取出第一列和第二列,双引号视为普通字符串
[root@kylin-xu ~]# awk '{print $1,$2}' 4.txt 
a b
d e
a s
a x
[root@kylin-xu ~]# awk '{print $1" "$2}' 4.txt 
a b
d e
a s
a x
[root@kylin-xu ~]# awk '{print $1","$2}' 4.txt 
a,b
d,e
a,s
a,x

案例3:取出第二列和第一列,反着来
[root@kylin-xu ~]# awk '{print $2","$1}' 4.txt 
b,a
e,d
s,a
x,a

案例4:取出文件中最后一列,NF是表示每一行有多少列是具体的数字
[root@kylin-xu ~]# awk '{print NF}' 4.txt 
3
3
4
5
[root@kylin-xu ~]# awk '{print $NF}' 4.txt 
c
f
g
b

[root@kylin-xu ~]# df -h| awk '{print $NF}' 
挂载点
/dev
/dev/shm
/run
/sys/fs/cgroup
/
/tmp
/backup
/boot
/run/user/0

指定分隔符

awk指定分隔符
语法结构:
	     awk -F: '{print $1}'    # 第一种指定分隔符方法
	     awk -F ":" '{print $1}' # 第二种指定分隔符方法
案例1:取出passwd文件中第一列
awk -F: '{print $1}' passwd 

案例2:统计成绩
[root@kylin-xu ~]# cat sorce.txt 
张三  Linux96  100
李四  Linux96  22
老王  Linux96  33
赵六  Linux96  44
[root@kylin-xu ~]# awk '{print $1,$3}' sorce.txt | sort -rn -k2
张三 100
赵六 44
老王 33
李四 22

案例3:万物皆可分割
[root@kylin-xu ~]# echo abca | awk -Fc  '{print $1}'
ab

[root@kylin-xu ~]# awk -F ":/" '{print $2}' passwd 
root
bin
sbin
var/adm
var/spool/lpd
sbin
sbin
sbin
var/spool/mail
root

案例4:指定两个分隔符
[root@kylin-xu ~]# awk -F ":|/" '{print NF}' passwd 
10
10
10
11
12
10
10
10
12
10 

案例5:任意字符作为分隔符
[root@kylin-xu ~]# awk -F "[:/]" '{print NF}' passwd 

案例6:
[root@kylin-xu ~]# cat 5.txt 
--:-/test--/::oldboy-oldgirl
[root@kylin-xu ~]# awk -F "[-:/]" '{print $6}' 5.txt 
test
[root@kylin-xu ~]# awk -F "[-:/]+" '{print $2}' 5.txt 
test

awk模式+动作

模式: 通过NR找出指定的行  awk 'NR==5'
	 通过模糊过滤的方式找出行 awk '/root/'
awk 'NR==5{print $1}'
案例1:输出文件中第二行第二列
[root@kylin-xu ~]# awk -F: 'NR==2{print $2}' passwd 
x

案例2:输出文件中大于第六行的最后一列
[root@kylin-xu ~]# awk -F: 'NR>6{print $NF}' passwd 
/sbin/shutdown
/sbin/halt
/sbin/nologin
/sbin/nologin

案例3:输出第一行的第一列和最后一列
[root@kylin-xu ~]# awk -F: 'NR==1{print $1,$NF}' passwd 
root /bin/bash

案例4:输出包含adm的行的第三列
[root@kylin-xu ~]# awk -F: '/^adm/{print $3}' passwd 
3

面试题 我有一个文档,取出文件中的第5行的第3列

awk 'NR==5{print $3}'

比较表达式

按照字符比对查找行
案例1:查找第一列等于root的行
[root@kylin-xu ~]# awk -F: '$1=="root"' passwd 
root:x:0:0:root:/root:/bin/bash
root:x:11:0:operator:/root:/sbin/nologin

案例2.使用正则匹配字符串,匹配第一列以n结尾的行
[root@kylin-xu ~]# awk -F: '$1 ~ "n$"' passwd 
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown

案例3:匹配最后一列以n结尾的行
awk -F: '$1!="root"' passwd 

案例4:对开头是r的行进行取反
awk -F: '$1 ~ "^[^r]"'  passwd 

案例5:数字比对
[root@kylin-xu ~]# awk -F: '$3==0'  passwd 
root:x:0:0:root:/root:/bin/bash

案例6:第三列大于5的行
awk -F: '$3>=5'  passwd 

[root@kylin-xu ~]# awk '$3>=50'  sorce.txt 
张三  Linux96  100

【5】、awk算术运算

案例1:
[root@kylin-xu ~]# awk 'BEGIN {print 10+1}'
11

案例2:输出倒数第二列
[root@kylin-xu ~]# awk '{print NF-1}' 4.txt 
2
2
3
4
[root@kylin-xu ~]# awk '{print $(NF-1)}' 4.txt 
b
e
f
v

[root@kylin-xu ~]# awk '{print $(NF-1)}' 4.txt 
a
e
f
v

标签:sbin,kylin,命令,awk,print,root,xu
From: https://www.cnblogs.com/xuruizhao/p/18546401

相关文章

  • Docker常用命令
    帮助启动类命令启动docker:systemctlstartdocker停止docker:systemctlstopdocker重启docker:systemctlrestartdocker查看docker状态:systemctlstatusdocker开机启动:systemctlenabledocker查看docker概要信息:dockerinfo查看docker总体帮助文档:docke......
  • k8s服务内容滚动升级以及常用命令介绍
    查看K8S集群所有的节点信息kubectlgetnodes删除K8S集群中某个特定节点kubectldeletenodes/10.0.0.123获取K8S集群命名空间kubectlgetnamespace获取K8S所有命名空间的那些部署kubectlgetdeployment--all-namespaces创建命名空间web界面上看到的效果,但是不......
  • awk是一种在 Linux 和 Unix 系统中非常强大且常用的文本处理工具
    一、awk介绍awk是一种在Linux和Unix系统中非常强大且常用的文本处理工具,它的名字来源于其三位创始人AlfredAho、PeterWeinberger和BrianKernighan的姓氏首字母。awk可以对文本文件(或来自标准输入的文本流)按行进行扫描,并根据用户指定的规则来处理文本,比如提取特......
  • 计算机网络 实验三 常用网络管理命令(二)
    一、实验目的    掌握常用网络管理命令应用。二、实验原理    一般网络管理命令的原理就是在建立连接通道,然后发送一些测试数据包,对方接受后返回信息,而这个返回数据包包含一些网络状况的相关信息。常用的网络管理命令有netstat 命令、arp命令、tracert命令......
  • [Docker#7] 容器 | OOM | 常用命令 | 交互模式 | 批量处理
    目录什么是容器生活案例为什么需要容器?容器的生命周期3种特殊情况3.1容器OOM3.2容器异常退出3.3容器暂停容器命令清单Docker容器常用命令dockercreatedockerrundockerpsdockerlogsdockerexecdockerstartdockerstopdockerrestartdockerkilld......
  • sed命令
    sed作用:1.取行2.删除行3.替换行4.增加内容5.后向引用语法结构:sed'模式+动作'file#直接处理文件效率比较高catfile|sed'模式+动作'#效率较低其他命令的结果|sed对显示到屏幕上的内容进行处理模式:找谁,按照行模糊过滤查找文件内容动作:找到后干啥显示......
  • [ Linux 命令基础 ] Linux 命令大全-命令前置知识-系统管理-文件和目录管理-文本处理
    ......
  • 管道符 (|) 是 Unix/Linux 系统中用于将一个命令的输出传递给另一个命令作为输入的符
    一、管道符管道符(|)是Unix/Linux 系统中用于将一个命令的输出传递给另一个命令作为输入的符号。它是命令行和shell脚本中非常常用的工具,允许你将多个命令链接在一起,形成数据处理管道。1、管道符的用法最基本的用法是将一个命令的输出传递给另一个命令。例如,以下命令将l......
  • linux 命令值xargs与tr
    管道符 | 允许将一个命令的输出作为另一个命令的输入。然而,管道符在处理某些类型的输入时存在局限性,特别是当需要将一系列输入项作为单个命令的多个参数时()。xargs 的出现正是为了解决这个问题。xargs 能够从标准输入(stdin)读取数据,并将这些数据转换为特定命令的参数列表。这......
  • 在 Windows 系统中,可以使用内置的命令行工具来分割和合并大文件,虽然没有专门的 split
    在Windows系统中,可以使用内置的命令行工具来分割和合并大文件,虽然没有专门的split命令(类似于Linux中的split命令),但可以通过一些其他方式实现这一功能。以下是一些常用方法:1.使用 fsutil 命令分割大文件fsutil是Windows提供的一个工具,可以用于管理文件系统,但并不直......