Linux下的awk用法详解

  • 一、awk介绍
  • 二、awk的语法
  • 三、awk常见用法
  • 四、awk其他用法
  • 五、awk语言特性

一、awk介绍

1.AWK 是一种处理文本文件的语言,是一个强大的文本分析工具。之所以叫 AWK 是因为其取了三位创始人 Alfred Aho,Peter Weinberger, 和 Brian Kernighan 的 Family Name 的首字符。
2.AWK拥有自己的语言: AWK 程序设计语言,它允许您创建简短的程序,这些程序读取输入文件、为数据排序、处理数据、对输入执行计算以及生成报表,还有无数其他的功能。
3.

二、awk的语法

1.RHEL8.0系统上的awk帮助

[root@control scripts]# awk --help
Usage: awk [POSIX or GNU style options] -f progfile [--] file ...
Usage: awk [POSIX or GNU style options] [--] 'program' file ...
POSIX options:      GNU long options: (standard)-f progfile     --file=progfile-F fs           --field-separator=fs-v var=val        --assign=var=val
Short options:      GNU long options: (extensions)-b            --characters-as-bytes-c         --traditional-C         --copyright-d[file]     --dump-variables[=file]-D[file]        --debug[=file]-e 'program-text'  --source='program-text'-E file           --exec=file-g          --gen-pot-h         --help-i includefile        --include=includefile-l library        --load=library-L[fatal|invalid]    --lint[=fatal|invalid]-M           --bignum-N          --use-lc-numeric-n          --non-decimal-data-o[file]      --pretty-print[=file]-O            --optimize-p[file]      --profile[=file]-P         --posix-r           --re-interval-s         --no-optimize-S         --sandbox-t         --lint-old-V            --version

2.awk选项解释

-F fs or --field-separator fs
指定输入文件折分隔符,fs是一个字符串或者是一个正则表达式,如-F:。
-v var=value or --asign var=value
赋值一个用户定义变量。
-f scripfile or --file scriptfile
从脚本文件中读取awk命令。
-mf nnn and -mr nnn
对nnn值设置内在限制,-mf选项限制分配给nnn的最大块数目;-mr选项限制记录的最大数目。这两个功能是Bell实验室版awk的扩展功能,在标准awk中不适用。
-W compact or --compat, -W traditional or --traditional
在兼容模式下运行awk。所以gawk的行为和标准的awk完全一样,所有的awk扩展都被忽略。
-W copyleft or --copyleft, -W copyright or --copyright
打印简短的版权信息。
-W help or --help, -W usage or --usage
打印全部awk选项和每个选项的简短说明。
-W lint or --lint
打印不能向传统unix平台移植的结构的警告。
-W lint-old or --lint-old
打印关于不能向传统unix平台移植的结构的警告。
-W posix
打开兼容模式。但有以下限制,不识别:/x、函数关键字、func、换码序列以及当fs是一个空格时,将新行作为一个域分隔符;操作符**和**=不能代替^和^=;fflush无效。
-W re-interval or --re-inerval
允许间隔正则表达式的使用,参考(grep中的Posix字符类),如括号表达式[[:alpha:]]。
-W source program-text or --source program-text
使用program-text作为源代码,可与-f命令混用。
-W version or --version
打印bug报告信息的版本。

三、awk常见用法

1.文本字段处理

[root@control scripts]# awk '{print $0}' /etc/passwd |head
root:x:0:0:root:/root:/bin/bash
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
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin

2.自定义字符段替换原文本的行输出

[root@control scripts]# awk '{print "this is a test line"}' /etc/fstab
this is a test line
this is a test line
this is a test line
this is a test line
this is a test line
this is a test line
this is a test line
this is a test line
this is a test line
this is a test line
this is a test line
this is a test line
this is a test line
this is a test line
this is a test line
this is a test line

3.指定文本的列输出

[root@control scripts]# awk '{print $1}' /etc/fstab #
#
#
#
#
#
#
#
#
#
UUID=11568b58-6451-40da-a59f-7da0c2536cd3
UUID=59347c6a-20b5-4bc7-8b74-caa2980c6832
UUID=a94ebb71-f259-4589-9ad9-6ae3f495bc63
UUID=2f261207-03e5-47d7-ac83-9a4424fb6f74

4.指定文本的列输出,且列之间添加空格显示

[root@control scripts]# awk '{print $1 "\t " $3}' /etc/fstab
UUID=11568b58-6451-40da-a59f-7da0c2536cd3   xfs
UUID=59347c6a-20b5-4bc7-8b74-caa2980c6832   xfs
UUID=a94ebb71-f259-4589-9ad9-6ae3f495bc63   xfs
UUID=2f261207-03e5-47d7-ac83-9a4424fb6f74   swap

四、awk其他用法

1.指定格式输出文本

[root@control scripts]#
[root@control scripts]# awk -F":" '{print "USER: " $1  "\tSHELL "  $7}' /etc/passwd |head
USER: root  SHELL /bin/bash
USER: bin   SHELL /sbin/nologin
USER: daemon    SHELL /sbin/nologin
USER: adm   SHELL /sbin/nologin
USER: lp    SHELL /sbin/nologin
USER: sync  SHELL /bin/sync
USER: shutdown  SHELL /sbin/shutdown
USER: halt  SHELL /sbin/halt
USER: mail  SHELL /sbin/nologin
USER: operator  SHELL /sbin/nologin

2.设置多个字符为分隔符

[root@control scripts]# awk -F "[\t ]+" '{print "DEVICE: " $1 "\tFSTYPE: " $3}' /etc/fstab
DEVICE: UUID=11568b58-6451-40da-a59f-7da0c2536cd3  FSTYPE: xfs
DEVICE: UUID=59347c6a-20b5-4bc7-8b74-caa2980c6832  FSTYPE: xfs
DEVICE: UUID=a94ebb71-f259-4589-9ad9-6ae3f495bc63  FSTYPE: xfs
DEVICE: UUID=2f261207-03e5-47d7-ac83-9a4424fb6f74  FSTYPE: swap
DEVICE:     FSTYPE: 

五、awk语言特性

awk中的if语句

[root@control ~]# cat numtest.txt
20 low
109 high
29 low
290 high
111 high
[root@control ~]# awk '{if ($1>100) print $1 " bad!"; else print "OK!"}' /root/numtest.txt
OK!
109 bad!
OK!
290 bad!
111 bad!
OK!

备注:awk作为一门语言,支持语言的三种基本元素:顺序、判断、循环。所以awk可以支持if语句while/for循环,break和continue。

Linux下的awk用法详解相关推荐

  1. Linux下find命令用法详解

    Linux下find命令用法详解 学神VIP烟火 学神IT教育:XueGod-IT 最负责任的线上直播教育平台 本文作者为VIP学员 烟火 第一部分:根据文件名查找 1.在当前目录查找名称为test的 ...

  2. Linux下diff命令用法详解

    大家好,我是良许. 我们在平时工作的时候,经常要知道两个文件之间,以及同个文件不同版本之间有何异同点.在 Windows 下,有 beyond compare 这个好用的工具,而在 Linux 下,也 ...

  3. linux下rename命令用法详解(重命名文件)

    本文介绍了linux系统中rename命令的用法,用来修改文件名.重命名文件,批量重命名文件rename是最好的选择,需要的朋友参考下. 在linux系统中重命名文件,经常用到mv命令,批量重命名文件 ...

  4. linux下xargs命令用法详解

    From:http://biancheng.dnbcw.info/shell/268829.html xargs在 linux中是个很有用的命令,它经常和其他命令组合起来使用,非常的灵活. xargs ...

  5. linux中which命令详解,Linux下which命令使用详解(转)

    我们经常在linux要查找某个文件,但不知道放在哪里了,可以使用下面的一些命令来搜索: which 查看可执行文件的位置. whereis 查看文件的位置. locate 配合数据库查看文件位置. f ...

  6. linux bin fuser,Linux中fuser命令用法详解

    描述: fuser可以显示出当前哪个程序在使用磁盘上的某个文件.挂载点.甚至网络端口,并给出程序进程的详细信息. fuser显示使用指定文件或者文件系统的进程ID. 默认情况下每个文件名后面跟一个字母 ...

  7. linux三剑客之awk命令详解

    linux三剑客之awk命令详解 awk 是一个处理文本的编程语言工具,能用简短的程序处理标准输入或文件.数据排序.计算以及生成报表等等.awk工具主要用于格式化输出,可以用类似于处理表格的方式处理文 ...

  8. linux下sort命令使用详解---linux将文本文件内容加以排序命令

    转载自:http://www.cnblogs.com/hitwtx/archive/2011/12/03/2274592.html linux下sort命令使用详解---linux将文本文件内容加以排 ...

  9. linux输入一个用户看是否在工作,linux下的用户管理详解

    linux下的用户管理详解 useradd 命令详解 添加用户 想要对linux下面的帐号了解的话首先必须要了解的4个配置文件[root@localhost /]# cat /etc/passwd 首 ...

最新文章

  1. 王式安概率论与数理统计基础课手写笔记-第一章概率与事件-第二章随机变量及其分布
  2. 有条件忽略测试的JUnit规则
  3. java .do是什么_为什么Java Web应用程序使用.do扩展名?它从哪里来的?
  4. mysql读出来的日期后面多了个 .0处理及layui中日期控件点击一闪而过处理
  5. 一步一步往前冲-WCF
  6. python sorted下标_初学者掌握python 列表需要知道的操作
  7. pytorch int64的tensor怎么转换成float64
  8. Word页码从任意页开始设置方法
  9. RouterOS o*** client 连接爱快 Open*** 服务端
  10. java容器之Map
  11. 开涛的博客 spring
  12. 灵魂画手教你浅拷贝与深拷贝
  13. 记账APP:小哈记账2——注册页面的制作
  14. 笔记本无线连外网,有线连内网,如何实现?
  15. 音乐服务器制作教程,让NAS做音乐服务器
  16. 可视化第一部分(简单的图形)
  17. 技术丨如何处理有依赖的消息
  18. 【空间规划符号库】国土空间规划_制图规范+制图样式
  19. C++中const关键字用法详解及实例和源码下载(一)
  20. “战疫”有AI系列 - No.1

热门文章

  1. Weblogic java.lang.OutOfMemoryError: PermGen space
  2. Excel常见错误信息
  3. C#根据execl批量修改图片名称
  4. asp.net发布到IIS中出现错误:处理程序“PageHandlerFactory-Integrated”在其模块列表中有一个错误模块“ManagedPipelineHandler”...
  5. 21.单链表怎么就地逆序?
  6. SSH暴力破解IP大曝光
  7. 旷视《人工智能应用准则》全文公布 提倡善用AI技术
  8. mysql设置定时入伍_mysql 集群自动化配置
  9. web---jsp文件乱码的解决办法
  10. Rabbitmq如何保证消息顺序执行