欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

相关标签: 工具