首页 > 其他分享 >awk

awk

时间:2024-07-16 18:41:12浏览次数:2  
标签:passwd server etc awk print root

awk

  • awk:单行脚本
  • 核心 awk:取行
  • 核心 awk:取列
  • 核心 awk:混合取行取列
  • awk:统计功能
  • 未来:判断循环
  • 未来:数组

1、awk概述

四剑客 特点 擅长
find 查找文件 查找文件,与其他命令配合
grep/egrep 过滤 过滤速度最快
sed 过滤、取行、替换、删除 替换修改文件内容、取行
awk 过滤、取行、取列、统计计算、判断、循环... 取行、取列、统计计算
  • awk是一种语言,叫做单行脚本

1、格式

取出/etc/passwd中的第1行的第1列、第3列和最后一列

awk -F: NR==1{print $1,$3,$NF} ' /etc/passwd

awk -F: '条件{动作1;动作2...}' /etc/passwd

条件:找谁

动作:干啥

2、awk取行

1️⃣取出/etc/passwd中的第一行

NR:Number of Record 记录号、行号。也可以写大于几行,小于几行

{print $0}:输出整行内容,$0表示当前的内容

## 简写
[root@Ansible-server ~]# awk 'NR==1' /etc/passwd
root:x:0:0:root:/root:/bin/bash
## 完整写法
[root@Ansible-server ~]# awk 'NR==1{print $0}' /etc/passwd
root:x:0:0:root:/root:/bin/bash
[root@Ansible-server ~]# awk 'NR>=6{print $0}' /etc/passwd

2️⃣取/etc/passwd出2-5行的内容

&&:表示并且,and

||:表示或者,or

[root@Ansible-server ~]# awk 'NR>=2 && NR<=5{print $0}' /etc/passwd
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️⃣过滤出/etc/passwd文件中包含root或者nobody的行

[root@Ansible-server ~]# awk '/root|nobody/' /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
nobody:x:65534:65534:Kernel Overflow User:/:/sbin/nologin
stap-server:x:155:155:Systemtap Compile Server:/opt/rh/gcc-toolset-11/root/var/lib/stap-server:/sbin/nologin

4️⃣从包含root的行开始输出到包含nobody的行,可以使用这个功能实现截取一个时间段的日志

[root@Ansible-server ~]# awk '/root/ , /nobody/' /etc/passwd
  • 小结

    • awk+NR:取出指定的行,指定范围的行

    • awk+//:过滤

    • awk+其他变量:用于精确过滤(讲完取列就可以使用)

      [root@Ansible-server ~]# awk -F: '$3==0' /etc/passwd
      root:x:0:0:root:/root:/bin/bash
      

3、awk取列

1️⃣使用awk取出ls -lh的表示大小的列和最后一列

  • NF:表示有多少列
  • $NF:最后一列
[root@Ansible-server opt]# ls -lh | awk '{print $5,$9}'
[root@Ansible-server opt]# ls -lh | awk '{print $5,$NF}'
49 a.txt
4.0K mplayer
2.1K passwd
93 rh
12G rhel8.8.iso
74 sed.txt
[root@Ansible-server opt]# ls -lh | awk 'NR>1{print $5,$NF}' | column -t   
49    a.txt
4.0K  mplayer
2.1K  passwd
93    rh
12G   rhel8.8.iso
74    sed.txt
[root@Ansible-server opt]# echo 123 355 6667 87678 23 | awk '{print $(NF-1),$NF}'
87678 23

2️⃣取出/etc/passwd中第一列、第三列和第五列

-F:指定列之间的分隔符,如果不加-F则默认是空格,-F也支持正则指定分隔符

[root@Ansible-server opt]# awk -F: '{print $1,$3,$NF}' /etc/passwd | column -t

3️⃣指定复杂分隔符取出IP

⚠️在inet前有多个空格,对于awk,如果使用-F参数,每遇到一个空格就切一刀,因此为了实现把所有连续的空格作为一个整体一起切断,我们需要在正则匹配分隔符时加上+号。

[root@Ansible-server opt]# ip address show ens160 | awk 'NR==4' | awk '{print $2}' | awk -F'/' '{print $1}'
192.168.121.141
## 进行简化
[root@Ansible-server opt]# ip address show ens160 | awk 'NR==4' | awk -F'[ /]+' '{print $3}'
192.168.121.141
[root@Ansible-server opt]# ip address show ens160 | awk 'NR==4' | awk -F'inet |/24' '{print $2}'
192.168.121.141
  • 小结
    • 如果是空格、连续空格,直接使用awk取列即可
    • 其他情况使用-F指定分隔符,必要时加正则实现

4、awk取行取列

awk 格式 '条件{动作}'

标签:passwd,server,etc,awk,print,root
From: https://www.cnblogs.com/xuruizhao/p/18305890

相关文章

  • Linux-awk
    awk3.4.2功能过滤 取行取列统计计算数组函数3.4.3格式awk条件动作(找谁干啥)awk[options]'commands'filenamesawk[options]-fawk-script-filefilenames3.4.4awk处理数据的方式:1、进行逐行扫描文件,从第一行到最后一行2、寻找匹配的特定模式的行,......
  • Linux命令行之文本处理awk
    处理有分隔符的文本文档,默认分隔符是空格。awk的一些内置变量NF:字段数量(NumberofFields)NR:当前记录号(NumberofRecords)$0:当前记录(整行)$1,$2,...:当前记录的第1个、第2个等字段FS:字段分隔符(FieldSeparator),默认为空格或制表符OFS:输出字段分隔符(OutputFieldSeparator),默......
  • awk常用案例
    1、取出/etc/passwd中的第1行的第1列,第3列和最后一列awk -F: 'NRՎҧ1{print$1,$3,$NF}'/etc/passwd2、取出/etc/passwd的第1行awk'NR==1'/etc/passwd3、取出第2行到第5行的内容awk'NR>=2&&NR<=5'/etc/passwd4、过滤出/etc/passwd文件中包含root或nobody的行......
  • Linux 中awk命令实现将多个连续的字符替换为指定的一个字符
     001、[root@PC1test]#lsa.txt[root@PC1test]#cata.txt##测试数据aabbbbbbccbbwwxxyyzzddjjkkmmss[root@PC1test]#awk'{sub("b+","Q");print$0}'a.txt##将多个连续的b替换为QaaQcc......
  • Linux awk命令中如何删除数组
     001、Linuxawk中如何删除数组(base)[b20223040323@admin2test]$cut-f5-6rt288_2_3.bim|paste-<(cut-f5-6yt4_2_3.bim)|headCA0ATCCTCACAACCATG......
  • 【Shell】sed xargs grep awk的组合用法
    一、批量删除指定字符串"slave-xxx":grep-inr"slave-xxx"|awk-F':''{print$1}'|xargs-n1-I{}sed-i'/slave-xxx/d'{}二、批量替换指定字符串"slave-xxx":grep-inr"slave-abc"|awk-F':'......
  • Linux系统运维命令:查看http的并发请求数及其TCP连接状态(使用netstat结合awk和sort,组合
    一、需求二、解决方法(一)解决思路(二)命令三、实例演示和命令解释(一)实例演示(二)命令解释四、扩展一、需求用户访问一个视频监控平台的web服务特别频繁,据客户说,有大概2000个用户,要随机访问这个视频监控平台,这样对带宽的要求非常大。因此,他们需要查看到底有多少个http的并......
  • SHELL脚本学习(十四)gawk进阶
    一、使用变量gawk支持两种变量内建变量自定义变量1.1内建变量1.1.1字段和记录分隔符变量数据字段变量允许使用美元符号$和位置来引用对应的字段。$1对应第一个数据字段,$2对应第二个数据字段,以此类推。数据字段用字段分隔符划定。默认情况下,字段分隔符是一个空......
  • 文本三剑客之grep和awk
    文本三剑客之grep和awk目录文本三剑客之grep和awk一、grep命令grep命令的语法:grep[选项]...查找条件目标文件命令作用-m数字多个匹配只取第一个-v取反-i忽略大小写-n显示匹配的行号-c统计匹配的行数-o仅显示匹配到的字符串-A数字匹配后几......
  • 文本三剑客之awk命令
    概念awk是Linux以及UNIX环境中现有的功能最强大的数据处理工具,awk其名称得自于它的创始人AlfredAho、PeterWeinberger和BrianKernighan姓氏的首个字母awk是一种处理文本数据的编程语言,适合文本处理和报表生成,awk的设计使得它非常适合于处理由行和列组成的文本数据......