linux下awk的使用

awk 是一个强大的文本处理工具,在 Linux 和 UNIX 系统中被广泛使用。它用于模式扫描和文本/数据提取,以及对数据进行报告和转换。awk 的名字来自其创始人 Alfred Aho、Peter Weinberger 和 Brian Kernighan 的姓氏首字母。

基本结构

awk 的基本结构如下:

awk 'pattern { action }' file
  • pattern:一个可选的模式,用于匹配行。如果省略,则对所有行执行 action
  • action:当模式匹配到行时执行的动作。通常包括打印、赋值、算术运算等。
  • file:要处理的输入文件。

示例

打印文件内容
awk '{ print }' file.txt # 打印 file.txt 的所有内容

打印指定字段

默认情况下,awk 使用空白字符(空格和制表符)作为字段分隔符,并将字段编号从 1 开始。

echo -e "one two three\nfour five six" | awk '{ print $2 }'  # 输出 "two" 和 "five"
打印多个字段
 
echo -e "one two three\nfour five six" | awk '{ print $1, $3 }' # 输出 "one three" 和 "four six"
使用自定义字段分隔符
echo "a:b:c" | awk -F: '{ print $2 }' # 使用冒号作为字段分隔符,输出 "b"
条件打印
echo -e "apple 10\nbanana 20\ncherry 5" | awk '$2 > 15 { print $1 }'  # 输出 "banana
awk '/2024-04-28/ && !/The route/' storage/logs.error
内置变量

awk 有许多内置变量,如 NR(当前行号)、NF(当前行的字段数量)等。

echo -e "a b c\nd e f" | awk 'END { print NR }' # 输出行数,即 2
echo -e "a b c\nd e f" | awk '{ print NF }' # 输出每行的字段数,即 3

执行算术运算
echo -e "1 2\n3 4" | awk '{ print $1 + $2 }' # 输出每行的字段和,即 3 和 7
使用 BEGIN 和 END

BEGIN 在开始处理任何输入行之前执行一次动作,而 END 在处理完所有输入行之后执行一次动作。

echo -e "a\nb\nc" | awk 'BEGIN { print "Start" } { print } END { print "End" }'
# 输出:
# Start
# a
# b
# c
# End

进阶用法

多重模式与动作
echo -e "1 a\n2 b\n3 c" | awk '/1/ { print "One: " $0 } /2/ { print "Two: " $0 }'
# 输出:
# One: 1 a
# Two: 2 b
使用数组
echo -e "apple 10\nbanana 20\napple 30" | awk '{ sum[$1] += $2 } END { for (i in sum) print i, sum[i] }'
# 输出:
# apple 40
# banana 20
使用函数

awk 内置了许多函数,如 length()substr()toupper() 等。

echo "Hello World" | awk '{ print toupper($0) }' # 输出 "HELLO WORLD"

这只是 awk 功能的冰山一角。由于其强大的文本处理能力,awk 在日常的系统管理和文本处理任务中非常有用。要深入了解 awk 的所有功能和细节,建议查阅相关的手册页(man awk)或权威的 awk 书籍。

  • 10
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值