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)

大家都在看

  • 文本编辑命令

    一、vim编辑器 1、vim的三种模式 一般模式(正常模式):以vim打开文件就直接进入到此模式,此模式中可以使用上下左右按键进行移动光标,也可以在此模式下进行文件的复制粘贴删除等…

    Linux 2023年6月6日
    0139
  • windows下redis配置密码

    redis安装后目录如下: 最简单的启动方式是直接双击redis-server.exe 这样启动会有个问题,一旦你把命令行窗口关闭 redis也会被关闭,所以我们需要把它注册成服务…

    Linux 2023年5月28日
    0118
  • mac redis安装与使用,连接远程服务器 redis

    brew install redis@6.2 #后面@接版本号可指定版本,也可以不指定版本 brew services start redis redis-cli redis-cl…

    Linux 2023年5月28日
    0120
  • 源码安装apache脚本部署

    源码安装apache脚本部署 [root@localhost ~]# ls anaconda-ks.cfg httpd.tar.xz [root@localhost ~]# tar…

    Linux 2023年6月6日
    0126
  • [云原生]Kubernetes-介绍(第1章)

    一、应用部署方式演变 二、Kubernetes简介 三、Kubernetes组件 四、Kubernetes概念 参考: Kubernetes(K8S) 入门进阶实战完整教程,黑马程…

    Linux 2023年6月13日
    0143
  • 安卓逆向从0到1学习总结

    PS:该文已经首发于公众号信安之路!!! 初识安卓逆向是在2019年的暑假,到现在也快一年了,这一年来有刚从web渗透转来的迷茫,有成功破解了第一个app的喜悦,也有通宵熬夜逆向的…

    Linux 2023年6月8日
    0143
  • python 结构(序列分解)

    一、结构 结构的主要作用是将一个序列分解成若干个单独的变量。 1、对列表进行分解 2、对元组进行分解 3、对字典进行分解 4、对集合进行分解 5、对字符串进行分解 6、对文件句柄进…

    Linux 2023年6月7日
    0115
  • 网络安全中常用浏览器插件、拓展

    引言 现在的火狐、Edge( Chromium内核)、Chrome等浏览器带有插件、拓展(Plugin)的功能。这些插件中有的可以过滤广告,有的提供便捷的翻译,有的提供JavaSc…

    Linux 2023年6月6日
    0121
  • 阿里云IoT流转到postgresql数据库方案

    之前写过一篇如使用阿里云上部署.NET 3.1自定义运行时的文章,吐槽一下,虽然现在已经2022年了,但是阿里云函数计算的支持依然停留在.NET Core 2.1,更新缓慢,由于程…

    Linux 2023年6月6日
    0128
  • Nuget私服老是弹输入用户名密码框

    先把vs中私服删除,然后,控制面板\用户帐户\凭据管理器,删除私服 最后输入命令: NuGet.exe Sources Update -Name <feedname> …

    Linux 2023年6月13日
    0133
  • Linux 学习笔记

    Linux 学习笔记 作者:Grey 原文地址: 博客园:Linux 学习笔记 CSDN:Linux 学习笔记 说明 本文如果没有特别说明,环境是 CentOS 7, 主要是日常学…

    Linux 2023年5月27日
    0146
  • QLabel图片自适应

    故事背景:由于要做终端定制的需求,在服务端上传一张128像素的图片,下发给客户端,适配所有图标(界面左上角、任务栏、快捷方式、托盘等),但是由于每个位置的图标大小不一样,代码要根据…

    Linux 2023年6月13日
    0111
  • Xshell Win10不能直接拖文件进行文件传输解决办法

    centos安装了 lrzsz后, xshell还是无法直接从win10中拖文件 到centos。 需要修改win10的注册表。 见: https://blog.csdn.net/…

    Linux 2023年5月28日
    0114
  • Docker从入门到精通

    1 容器简介1.1 什么是 Linux 容器1.2 容器不就是虚拟化吗1.3 容器发展简史2 什么是 Docker?2.1 Docker 如何工作?2.2 Docker 技术是否与…

    Linux 2023年6月7日
    0109
  • 【机器学习笔记】一元线性回归原理、公式及代码实现

    线性回归是逻辑回归的基础,逻辑回归又是神经网络的组成部分,用于解决2分类问题 线性回归是所有算法的基础 概念: 线性关系是指变量之间的关系是一次函数,一个自变量x和因变量y的关系表…

    Linux 2023年6月13日
    0122
  • Java秒杀系统二:Service层

    404. 抱歉,您访问的资源不存在。 可能是网址有误,或者对应的内容被删除,或者处于私有状态。 代码改变世界,联系邮箱 contact@cnblogs.com 园子的商业化努力-困…

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