首页 > 系统相关 >Linux三剑客awk

Linux三剑客awk

时间:2022-08-25 17:46:40浏览次数:54  
标签:sbin xuexi3 nologin awk Linux print root 三剑客

Linux三剑客awk

awk是一个强大的linux命令,有强大的文本格式化的能力,好比将一些文本数据格式化成专业的excel的样式

awk早期在Unix上实现,我们用的awk是gawk,是GUN awk的意思

[root@xuexi3 tmp]# which awk
/usr/bin/awk
[root@xuexi3 tmp]# ll /usr/bin/awk
lrwxrwxrwx. 1 root root 4 Aug 16 14:33 /usr/bin/awk -> gawk

awk更是一门编程语言,支持条件判断、数组、循环等功能

再谈三剑客

  • grep,更擅长单纯的查找或匹配文本内容
  • sed,更擅长编辑,处理匹配到的文本内容
  • awk,更适合格式化文本内容,对文本进行复杂处理

三个命令称之为三剑客

awk基础

awk  [option] 'pattren[action]'  file ...
awk  参数      '条件动作'          文件

image-20220825142812961

  • Action指的是动作,awk擅长文本格式化,且输出格式化后的结果,因此最常用的动作就是print是printf

awk场景

动作场景

[root@xuexi3 home]# awk '{print $1}'  cssed.txt  #输出第一列
s1
s7
s12
s18
s28
s33
s40
s48
[root@xuexi3 home]# awk '{print $0}'  cssed.txt #输出全部
s1 s2 s3 s4 s5 s6
s7 s8 s9 s10 s11
s12 s13 s14 s15 s16 s17
s18 s19 s20 s21 s22 s23 s25 s26 s27 
s28 s29 s30 s31 s32
s33 s34 s35 s36 s37 s38 s39
s40 s41 s42 s43 s44 s45 s46 s47
s48 s49 s50
[root@xuexi3 home]# awk '{print $2}'  cssed.txt  #输出第二列
s2
s8
s13
s19
s29
s34
s41
s49

我们执行的命令是awk ‘{print $2}’,没有使用参数和模式,$2表示输出文本的第二列信息

awk默认以空格为分隔符,且多个空格也识别为一个空格,作为分隔符

awk是按行处理文件, 一行处理完,处理下一行,根据用户指定的分割符去工作,没有指定默认空格

指定分割符后,awk把每一行切割后的数据对应到内置变量

image-20220825145238631

  • $0表示整行
  • $NF表示当前分割后的最后一行
  • 倒数第二列可以写成$(ND-1)

awk内置变量

内置变量 解释
$n 指定分隔符后,当前记录的第n个字段
$0 完整的输入记录
FS 字段分隔符,默认是空格
NF(Number of fields) 分割后,当前行一共有多少个字段
NR(Number of records) 当前记录数,行数
更多内置变量可以man手册查看 man awk

一次打印多行

[root@xuexi3 home]# cat cssed.txt 
s1 s2 s3 s4 s5 s6
s7 s8 s9 s10 s11
s12 s13 s14 s15 s16 s17
s18 s19 s20 s21 s22 s23 s25 s26 s27 
s28 s29 s30 s31 s32
s33 s34 s35 s36 s37 s38 s39
s40 s41 s42 s43 s44 s45 s46 s47
s48 s49 s50
[root@xuexi3 home]# awk '{print $1,$2,$5}' cssed.txt 
s1 s2 s5
s7 s8 s11
s12 s13 s16
s18 s19 s22
s28 s29 s32
s33 s34 s37
s40 s41 s44
s48 s49 
[root@xuexi3 home]# awk '{print $1,$5,$3}' cssed.txt 
s1 s5 s3
s7 s11 s9
s12 s16 s14
s18 s22 s20
s28 s32 s30
s33 s37 s35
s40 s44 s42
s48  s50

自定义输出内容

awk,必须外层单引号,内层双引号

内置变量$1、$2,都不得添加双引号,否则会识别为文本,尽量别加引号

[root@xuexi3 home]# awk '{print "第一列:"$1,"第二列:"$3}'  cssed.txt 
第一列:s1 第二列:s3
第一列:s7 第二列:s9
第一列:s12 第二列:s14
第一列:s18 第二列:s20
第一列:s28 第二列:s30
第一列:s33 第二列:s35
第一列:s40 第二列:s42
第一列:s48 第二列:s50

awk参数

参数 解释
-F 指定
-v 定义或修改一个awk内部的变量
-f 从脚本文件中读取awk命令

awk '模式{动作}' 文件

awk案例

显示文件第五行

#=NR在awk中表示行号,NR==5表示行号是5的那一行
#注意一个等于号是修改变量的意思,两个等于号是关系运算符,是“等于的意思”
[root@xuexi3 home]# awk 'NR==5' cssed.txt    
s28 s29 s30 s31 s32

显示文件2-5行

设置模式条件

#告诉awk,我要看行号2到5的内容
[root@xuexi3 home]# awk 'NR==2,NR==5' cssed.txt 
s7 s8 s9 s10 s11
s12 s13 s14 s15 s16 s17
s18 s19 s20 s21 s22 s23 s25 s26 s27 
s28 s29 s30 s31 s32

给每一行的内容添加行号

添加变量,NR等于行号,$0表示一整行的内容

{print}是awk的动作

[root@xuexi3 home]# awk 'NR==2,NR==5 {print NR,$0}' cssed.txt 
2 s7 s8 s9 s10 s11
3 s12 s13 s14 s15 s16 s17
4 s18 s19 s20 s21 s22 s23 s25 s26 s27 
5 s28 s29 s30 s31 s32

显示文件的第一列,倒数第二列和倒数第三列

[root@xuexi3 home]# awk '{print $1 ,$(NF-1),$(NF-3)}' cssed.txt 
s1 s5 s3
s7 s10 s8
s12 s16 s14
s18 s26 s23
s28 s31 s29
s33 s38 s36
s40 s46 s44
s48 s49 s48 s49 s5

利用awk取出ifconfig里IP地址

[root@xuexi3 home]# ifconfig ens33
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 10.0.0.102  netmask 255.255.255.0  broadcast 10.0.0.255
        inet6 fe80::c8ef:f7f6:2949:b8fb  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:72:4f:0f  txqueuelen 1000  (Ethernet)
        RX packets 5865  bytes 544833 (532.0 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 3437  bytes 350034 (341.8 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

[root@xuexi3 home]# ifconfig ens33 | awk 'NR==2 {print $2}'
10.0.0.102

awk分隔符

wak分隔符分为两种

  • 输入分隔符,awk默认是空格,空白字符,英文field separator变量名是FS
  • 输出分隔符,output field separator,简称OFS

FS输入分隔符

awk逐行处理文本的时候,以输入分隔符为准,把文本切成多个片段,默认符号是空格

当我们处理特殊文件,没有空格的时候,可以自由指定分隔符特点

[root@xuexi3 etc]# awk -F ":" '{print $1,$NF}' passwd ## -F ":"从新定义:为分隔符取第一列和最后一列输出 
root /bin/bash
bin /sbin/nologin
daemon /sbin/nologin
adm /sbin/nologin
lp /sbin/nologin
sync /bin/sync
shutdown /sbin/shutdown
halt /sbin/halt
mail /sbin/nologin
operator /sbin/nologin

  • 除了使用-F选项,还可以使用变量的形式,指定分隔符,使用-v选项搭配,修改FS变量
awk -v FS=":" '{print $1.$NF}' file(文件名)

OFS输出分隔符

awk执行完命令,默认用空格隔开每一列,这个空格就是awk的默认输出符,例如

[root@xuexi3 etc]# awk -F":" -v OFS="---" '{print $1,$NF}' passwd
root---/bin/bash
bin---/sbin/nologin
daemon---/sbin/nologin
adm---/sbin/nologin
lp---/sbin/nologin
sync---/bin/sync
shutdown---/sbin/shutdown
halt---/sbin/halt
mail---/sbin/nologin
operator---/sbin/nologin
games---/sbin/nologin
ftp---/sbin/nologin
nobody---/sbin/nologin

标签:sbin,xuexi3,nologin,awk,Linux,print,root,三剑客
From: https://www.cnblogs.com/yzqj/p/16625067.html

相关文章

  • Linux网络问题排查
     网络排查一般是有一定的思路和顺序的,其实排查的思路就是根据具体的问题逐段排除故障可能发生的地方,最终确定问题。所以首先要问一问,网络问题是什么,是不通,还是......
  • Linux编程:信号
    1.信号概念信号是软件中断,很多比较重要的应用程序都需要信号处理。信号是一种进程之间或者内核与进程间异步通信的一种机制,例如:用户在终端键入中断键,会通过信号机制停......
  • Linux之awk匹配规则(二)
    1.awk匹配模式在awk[参数]'匹配规则+{执行命令}'文件名基本格式中'匹配规则+{执行命令}'(两者可以只有一个,但不可以一个没有,脚本命令必须用''括起来;......
  • 【LINUX】常用指令
    LINUX常用指令修改文件内容如何保存退出https://blog.csdn.net/m0_55289425/article/details/120762164......
  • Linux创建软连接--ln -s
    ln为某一个文件在另外一个位置建立一个同不的链接,这样操作之后就不需要在每一个需要的目录下都放一个必须相同的文件,我们只要在某个固定的目录,放上该文件,然后在其它的目......
  • KubeSphere3.3 私有云部署,在linux上 多节点安装
    在四台主机上部署(也可在虚拟机部署) 使用软件版本Centos7.9内核3.10.0-1160.el7.x86_64 KubeSphere3.3 KubeSphere官网 面向云原生应用的容器混合云,支持Kub......
  • linux问题汇总
    如何查看linux的ip地址?其中的内容表示什么意思?如何修改网卡的配置信息?如何配置静态IP地址?linux显示的信息分别表示什么意思?systemctl是干什么的?主要操作有哪些?vm的三......
  • linux安装jdk1.8并配置环境变量
    参考地址:https://blog.csdn.net/Yangsir_java/article/details/125635555linux下安装jdk,都是下载压缩包解压,配置环境变量等步骤。这里记录一下安装1.8版本的过程,方便下次......
  • Linux MYSQL安装
    1、安装mysql服务器及客户端sudoapt-getinstallmysql-servermysql-client 2、安装mysqlC语言接口sudoapt-getinstalllibmysql++-dev 3、编译文件(mysql_co......
  • Linux中的SELinux简单解释及如何禁用它
    简单理解SELinux是什么SELinux(SecurityEnhancedLinux为Linux提供了一种增强的安全机制,严格限制了用户进程主体(Subject)对服务器资源客体(Object)可以做的行为(Acti......