Linux下的awk用法详解

简介: Linux下的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。

相关实践学习
CentOS 7迁移Anolis OS 7
龙蜥操作系统Anolis OS的体验。Anolis OS 7生态上和依赖管理上保持跟CentOS 7.x兼容,一键式迁移脚本centos2anolis.py。本文为您介绍如何通过AOMS迁移工具实现CentOS 7.x到Anolis OS 7的迁移。
相关文章
|
4月前
|
Linux Perl
在Linux中,如何使用请用 cut 或者 awk,sed命令取出 linux 中 eth0 的 IP 地址?
在Linux中,如何使用请用 cut 或者 awk,sed命令取出 linux 中 eth0 的 IP 地址?
|
1月前
|
安全 网络协议 Linux
本文详细介绍了 Linux 系统中 ping 命令的使用方法和技巧,涵盖基本用法、高级用法、实际应用案例及注意事项。
本文详细介绍了 Linux 系统中 ping 命令的使用方法和技巧,涵盖基本用法、高级用法、实际应用案例及注意事项。通过掌握 ping 命令,读者可以轻松测试网络连通性、诊断网络问题并提升网络管理能力。
98 3
|
2月前
|
Linux Perl
Linux awk命令使用技巧
【10月更文挑战第16天】Linux awk命令使用技巧
49 4
|
2月前
|
存储 安全 Linux
Linux文件管理命令md5sum awk
通过结合 `md5sum`和 `awk`,不仅可以高效地进行文件完整性校验,还能灵活地处理和分析校验结果,为系统管理、数据审计等工作提供强大的支持。
86 2
|
2月前
|
Ubuntu Linux
Linux的基础用法
Linux的基础用法
24 6
|
3月前
|
监控 Linux
Linux系统中du命令与df命令的区别与用法
总的来说,`du` 和 `df` 在磁盘管理中互补使用,能够提供全面的磁盘空间使用信息,帮助用户和管理员有效地监控和管理系统资源。
102 3
|
3月前
|
存储 Ubuntu Linux
linux中的find 命令详细用法
本文介绍了如何将 `find` 命令与 `exec` 结合使用,通过具体示例展示了多种应用场景,如显示文件属性、重命名文件、收集文件大小、删除特定文件、执行工具、更改文件所有权和权限、收集 MD5 值等。文章还探讨了 `{} \;` 和 `{} +` 的区别,并演示了如何结合 `grep` 命令进行内容搜索。最后,介绍了如何在一个 `find` 命令中使用多个 `exec` 命令。这为 Linux 用户提供了强大的文件管理和自动化工具。
|
4月前
|
Linux 数据处理 Perl
在Linux中,awk命令的如何使用?
在Linux中,awk命令的如何使用?
|
4月前
|
数据挖掘 Linux Perl
在Linux中,awk和sed命令的作用?
在Linux中,awk和sed命令的作用?
|
4月前
|
Linux BI 数据处理
在Linux中,如何使用awk和sed进行文本处理?
在Linux中,如何使用awk和sed进行文本处理?

热门文章

最新文章