Linux - awk 命令

简介

AWK 是一种处理文本文件的语言,是一个强大的文本分析工具。之所以叫 AWK 是因为其取了三位创始人 Alfred Aho,Peter Weinberger和 Brian Kernighan 的Family Name 的首字符。主要用于数据扫描、过滤、统计汇总工作,数据可以来自标准输入、管道或者文件

内建变量

变量描述
$n 当前记录的第n个字段,第一列从$1开始,字段间由FS分隔
$0 完整的输入记录
FS 字段分隔符(默认是任何空格)
IGNORECASE 如果为真,则进行忽略大小写的匹配

log.txt文本内容如下:

2 this is a test
3 Are you like awk
This's a test
10 There are orange,apple,mongo

基本用法

用法1:

awk '{[pattern] action}' {filenames}   #行匹配语句 awk '' 只能用单引号

实例:

复制代码
 #每行按空格或TAB分割,输出文本中的1、4项
 awk '{print $1,$4}' log.txt
 ---------------------------------------------
 2 a
 3 like
 This's
 10 orange,apple,mongo
 #格式化输出
 awk '{printf "%-8s %-10s\n",$1,$4}' log.txt
 ---------------------------------------------
 2        a
 3        like
 This's
 10       orange,apple,mongo
复制代码

用法2:

awk -F  #-F相当于内置变量FS, 指定分割字符

实例:

复制代码
 #使用","分割
 awk -F, '{print $1,$2}' log.txt
 ---------------------------------------------
 2 this is a test
 3 Are you like awk
 This's a test
 10 There are orange apple
 #或者使用内建变量
 awk 'BEGIN{FS=","} {print $1,$2}' log.txt
 ---------------------------------------------
 2 this is a test
 3 Are you like awk
 This's a test
 10 There are orange apple
 #使用多个分隔符.先使用空格分割,然后对分割结果再使用","分割
 awk -F '[ ,]' '{print $1,$2,$5}' log.txt
 ---------------------------------------------
 2 this test
 3 Are awk
 This's a
 10 There apple
复制代码

用法3:

awk -v  #设置变量

实例:

复制代码
 awk -va=1 '{print $1,$1+a}' log.txt
 ---------------------------------------------
 2 3
 3 4
 This's 1
 10 11
 awk -va=1 -vb=s '{print $1,$1+a,$1b}' log.txt
 ---------------------------------------------
 2 3 2s
 3 4 3s
 This's 1 This'ss
 10 11 10s
复制代码

用法4:

awk -f {awk脚本} {文件名}

实例:

awk -f cal.awk log.txt

其他用法:

实例:

1)过滤第一列大于2的行

awk '$1>2' log.txt
---------------------------------------------
3 Are you like awk This's a test 10 There are orange,apple,mongo

2)过滤第一列等于2的行的第一列和第三列

awk '$1==2 {print $1,$3}' log.txt
---------------------------------------------
2 is

3)过滤第一列大于2并且第二列等于'Are'的行

awk '$1>2 && $2=="Are" {print $1,$2,$3}' log.txt
---------------------------------------------
3 Are you

4)输出第二列包含 "th",并打印第二列与第四列

awk '$2 ~ /th/ {print $2,$4}' log.txt
---------------------------------------------
this a

5)输出包含 "re" 的行

awk '/re/ ' log.txt
---------------------------------------------
3 Are you like awk
10 There are orange,apple,mongo
posted @   李若盛开  阅读(138)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· DeepSeek 开源周回顾「GitHub 热点速览」
点击右上角即可分享
微信分享提示