awk 入门
程序员文章站
2022-03-04 19:04:46
...
简介
AWK是一个优良的文本处理工具,Linux及Unix环境中现有的功能最强大的数据处理引擎之一。这种编程及数据操作语言(其名称得自于它的创始人阿尔佛雷德·艾侯、彼得·温伯格和布莱恩·柯林汉姓氏的首个字母)的最大功能取决于一个人所拥有的知识。awk经过改进生成的新的版本nawk,gawk,现在默认linux系统下日常使用的是gawk,用命令可以查看正在应用的awk的来源(ls -l /bin/awk )
语法
# 格式
$ awk 动作 文件名
# 示例
$ awk '{print $0}' demo.txt
# print是打印命令,$0代表当前行
Demo
# awk会根据空格和制表符,将每一行分成若干字段,
# 依次用$1、$2、$3代表第一个字段、第二个字段、第三个字段等等。
$ echo 'this is a test' | awk '{print $0}'
this is a test
# 换行符分隔字段
ps -ef |grep user-service |awk '{print $15"\n"$23}'
# print命令里面的逗号,表示输出的时候,两个部分之间使用空格分隔。
ps -ef |grep user-service |awk '{print $15,$23}'
# -F参数指定分隔符为冒号
# 文件demo.txt 内容
root:x:0:0:root:/root:/usr/bin/zsh
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
sys:x:3:3:sys:/dev:/usr/sbin/nologin
sync:x:4:65534:sync:/bin:/bin/sync
$ awk -F ':' '{ print $1 }' demo.txt
root
daemon
bin
sys
sync
# $NF就代表最后一个字段。
$(NF-1)代表倒数第二个字段。
$ echo 'this is a test' | awk '{print $NF}'
test
# 变量NR表示当前处理的是第几行。
$ awk -F ':' '{print NR ") " $1}' demo.txt
1) root
2) daemon
3) bin
4) sys
5) sync
# 输出奇数行
$ awk -F ':' 'NR % 2 == 1 {print $1}' demo.txt
# 输出第三行以后的行
$ awk -F ':' 'NR >3 {print $1}' demo.txt
$ awk -F ':' '$1 == "root" {print $1}' demo.txt
root
$ awk -F ':' '$1 == "root" || $1 == "bin" {print $1}' demo.txt
root
bin
# if
$ awk -F ':' '{if ($1 > "m") print $1}' demo.txt
root
sys
sync
# if else
$ awk -F ':' '{if ($1 > "m") print $1; else print "---"}' demo.txt
root
---
---
sys
sync
Reference
上一篇: Moment.js 文档
下一篇: 利用docker构建网页版简历