linux三剑客之awk

linux三剑客之awk

适用范围:awk主要是用来格式化文本。

语法格式:awk [参数] [处理规则] [操作对象]

参数 作用 -F 指定文本分隔符(不写默认是以空格作为分隔符)

grep、sed和awk都是读一行处理一行,直至处理完成。
1、接收一行作为输入
2、把刚刚读入进来得到文本进行分解
3、使用处理规则处理文本
4、输出一行,赋值给$0,直至处理完成
5、把处理完成之后的所有的数据交给END{}来再次处理

变量 作用 $0 代表当前行 $n 代表第n列 NF 代指当前行的总字段数 NR 代指行号 FS 指定文本内容分隔符,优先级要高于 -F,默认是空格 OFS 指定打印的分隔符,是自定义的分隔符,默认是空格

NF(代指数字,每行被分割后的总字段数)
[root@zonghan ~]# cat 8.txt
asfsdgs   asdsad   asdasdsa
sdfsdfas      sadasdsad
aSD  asd
asd   asdsad  sad
asdasd
asdasdas   sadsadasd
asdasd  asdsadssfgsad  sadsa
[root@zonghan ~]# awk '{print NF}' 8.txt
3
2
2
3
1
2
3
0
[root@zonghan ~]# awk '{print $NF}' 8.txt
asdasdsa
sadasdsad
asd
sad
asdasd
sadsadasd
sadsa       # $NF就是变相于打印NF所代表的列,又因为NF是总字段数,所以是打印最后一列
$0(代指代表当前行)
[root@zonghan ~]# awk -F: '{print $0, "---"}' 8.txt
asfsdgs   asdsad   asdasdsa ---
sdfsdfas      sadasdsad  ---
aSD  asd ---
asd   asdsad  sad ---
asdasd ---
asdasdas   sadsadasd ---
asdasd  asdsadssfgsad  sadsa ---
 ---    # 由此可以得出$0是代指的每一行的内容
 # $n (代表第n列)
[root@zonghan ~]# awk '{print $1}' 8.txt
asfsdgs
sdfsdfas
aSD
asd
asdasd
asdasdas
asdasd   # 打印的是第1列

[root@zonghan ~]# awk '{print $2}' 8.txt
asdsad
sadasdsad
asd
asdsad
          # 这里因为文本没第二列 所以为空
sadsadasd
asdsadssfgsad  # 打印的是第2列
NR(代指行号)
[root@zonghan ~]# awk '{print NR}' 8.txt
1
2
3
4
5
6
7
8
FS(指定文本内容分隔符,优先级要高于 -F,默认是空格)
[root@zonghan ~]# cat /etc/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
[root@zonghan ~]# awk -F: 'BEGIN{FS="x"}{print $NF}' /etc/passwd
:0:0:root:/root:/bin/bash
:1:1:bin:/bin:/sbin/nologin
:2:2:daemon:/sbin:/sbin/nologin  # 这里可以看出是以x分割而不是以-F的:分割的,所以优先级高于-F
0FS(指定打印的分隔符,自定义的分隔符,默认是空格)
[root@zonghan ~]# awk -F: 'BEGIN{OFS=">>>"}{print $1, $NF}' /etc/passwd
root>>>/bin/bash
bin>>>/sbin/nologin
daemon>>>/sbin/nologin
至少1个,最多4个 按以下顺序
BEGIN{}  # 括号里面内容会在awk读取文件之前执行
//  # 正则表达式
{}  # 循环
END{} # 括号里面内容会在awk读取文件之后执行

函数名 作用 print 打印 printf 格式化打印 %s 字符串 %d 数字 – 左对齐 + 右对齐 15 至少占用15字符

格式化打印
[root@zonghan ~]# awk -F: 'BEGIN{OFS=" | "}{printf "|%s|%s|\n", $1, $NF}' /etc/passwd
|root|/bin/bash|
|bin|/sbin/nologin|
|daemon|/sbin/nologin|
[root@zonghan ~]# awk -F: 'BEGIN{OFS=" | "}{printf "|%-15s|%s|\n", $1, $NF}' /etc/passwd
|root           |/bin/bash|
|bin            |/sbin/nologin|
|daemon         |/sbin/nologin|
[root@zonghan ~]# awk -F: 'BEGIN{OFS=" | "}{printf "|%-15s|%-15s|\n", $1, $NF}' /etc/passwd
|root           |/bin/bash      |
|bin            |/sbin/nologin  |
|daemon         |/sbin/nologin  |
[root@zonghan ~]# awk -F: 'BEGIN{OFS=" | "}{printf "|%+15s|%+15s|\n", $1, $NF}' /etc/passwd
|           root|      /bin/bash|
|            bin|  /sbin/nologin|
|         daemon|  /sbin/nologin|
[root@zonghan ~]# awk -F: 'BEGIN{OFS=" | "}{printf "|%+15s|%-15s|\n", $1, $NF}' /etc/passwd
|           root|/bin/bash      |
|            bin|/sbin/nologin  |
|         daemon|/sbin/nologin  |
打印出包含root的所有行
[root@zonghan ~]# awk -F: '/root/{print $0}' /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
打印以root开头的所有行
[root@zonghan ~]# awk -F: '/^root/{print $0}' /etc/passwd
root:x:0:0:root:/root:/bin/bash

符号 作用 > 筛选大于的数据 >= 筛选大于等于的数据 < 筛选小于的数据

Original: https://www.cnblogs.com/zonghan/p/15721169.html
Author: zong涵
Title: linux三剑客之awk

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/524258/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • django Middleware

    Middleware简介 Middleware是一个轻量级的,全局性质的Django请求/响应处理钩子框架。所谓钩子框架是指在request请求到达Django之后,views视图…

    Linux 2023年6月7日
    0103
  • Vue 3-150行代码实现新国标红绿灯效果案例

    昨天刷视频,都是关于新国标红绿灯的,看大家议论纷纷,下班就用150行代码通过Vue组件实践红绿模拟演示,视频也跟大家展示过了。今天接着更新图文版本,大家跟着优雅哥通过该案例实操模拟…

    Linux 2023年6月7日
    079
  • centos系统和Ubuntu系统命令区别以及常见操作

    一.前言 二.系统环境 三.命令区别 3.1 使用习惯和命令区别 3.2 服务管理的区别 3.3 软件包信息区别 四.Ubuntu系统常见操作 4.1 Ubuntu系统apt和ap…

    Linux 2023年6月7日
    0227
  • 【Example】C++ STL 常用容器概述

    前排提醒: 由于 Microsoft Docs 全是机翻。所以本文表格是我人脑补翻+审校。 如果有纰漏、模糊及时反馈。 了解每一种容器的特性、知道什么情况下用什么容器就可以。 序列…

    Linux 2023年6月13日
    083
  • 二进制安装docker

    下载二进制包 压到 /usr/local/bin ,我用的版本比较新 https://download.docker.com/linux/static/stable/x86_64/…

    Linux 2023年6月6日
    097
  • ELK收集日志之logstash使用

    一、logstash使用 1.logstah收集文件日志 不难理解,我们的日志通常都是在日志文件中存储的,所以,当我们在使用INPUT插件时,收集日志,需要使用file模块,从文件…

    Linux 2023年6月14日
    0110
  • GCC编译C:C++的四个过程

    从源码到可执行程序,经历四个过程: 预处理、编译、汇编和链接,前三步由使用编译器来完成、链接由链接来完成。 编译器将编译工作主要分为预处理,编译和汇编三部 连接器的工作是把各个独立…

    Linux 2023年6月13日
    066
  • Python中class内置方法__init__与__new__作用与区别探究

    最近尝试了解Django中ORM实现的原理,发现其用到了metaclass(元类)这一技术,进一步又涉及到Python class中有两个特殊内置方法__init__与__new_…

    Linux 2023年6月6日
    089
  • 那些技术实战中的架构设计方法

    上个月我写的一篇文章《关于技术能力的思考和总结》引起了大家的关注,好多读者的评论”以写代想、以想促真、以讲验真”,大家的感受很深刻,基于上次的文章,这篇文章…

    Linux 2023年6月8日
    084
  • 基于AnolisOS8.6安装OceanBase数据库

    网络配置 cd /etc/sysconfig/network-scripts/ ls vi ifcfg-ens33 修改网络配置 TYPE=Ethernet PROXY_METHO…

    Linux 2023年6月7日
    0102
  • Python 中 map() zip() list() 函数的介绍

    map() map(function , iterable, ….) : 依次将函数function作用在可迭代的list上,并返回对应的函数返回值,组成新的list(…

    Linux 2023年6月7日
    0105
  • 使用PowerShell收集多台服务器的性能计数器

    写在前面 当管理多台Windows Server服务器时(无论是DB、AD、WEB以及其他的应用服务器),当出现性能或其他问题后,参阅性能计数器都是一个非常好的维度从而推测出问题可…

    Linux 2023年5月28日
    088
  • 解决Ubuntu(20.04)和Windows10双系统时间不同步问题

    1. 原因分析 出现这种情况的原因是 Windows 和 Ubuntu它们在默认情况下看待硬件时间(主板上的BOIS显示的时间)的方式 不一样。 我们先来看看时间的概念: [En]…

    Linux 2023年5月27日
    0186
  • 4.7 Linux压缩文件或目录中文件为.bz2格式(bzip2命令)

    bzip2 命令同 gzip 命令类似,只能对文件进行压缩(或解压缩),对于目录只能压缩(或解压缩)该目录及子目录下的所有文件。当执行压缩任务完成后,会生成一个以”.b…

    Linux 2023年6月7日
    0111
  • 子网掩码、前缀长度、IP地址数的换算

    子网掩码、前缀长度、IP地址数的换算 子网掩码 子网掩码只有一个功能,就是将IP地址划分为网络地址和主机地址两部分。 如同现实生活中的通讯地址,可以看作省市部分和具体门牌号部分。相…

    Linux 2023年6月6日
    0245
  • shell运算符

    算术运算符 下表列出了常用的算术运算符,假定变量 a 为 10,变量 b 为 20: 运算符说明举例 + 加法 expr $a + $b 结果为 30。 – 减法 ex…

    Linux 2023年5月27日
    072
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球