当前位置: 首页 > news >正文

shell基础-awk

awk 是一个强大的文本处理工具,广泛用于 Unix 和 Linux 系统中。它可以用来处理和分析文本文件,特别是那些包含结构化数据的文件。以下是 awk 的基础知识和一些常用示例。

基本概念

  1. 记录和字段

    • 记录awk 处理的每一行文本称为一条记录。
    • 字段:每条记录中的列称为字段。默认情况下,字段由空格或制表符分隔。
  2. 内置变量

    • NR:当前记录的行号。
    • NF:当前记录中的字段数。
    • FS:字段分隔符,默认为空格或制表符。
    • OFS:输出字段分隔符,默认为空格。
    • ORS:输出记录分隔符,默认为换行符。
    • RS:记录分隔符,默认为换行符。
    • $0:当前记录的全部内容。
    • $n:当前记录的第 n 个字段
  3. 模式和动作

    • 模式:定义了何时执行某些操作的条件。
    • 动作:在满足模式条件时执行的一系列命令,用 {} 包围。

基本语法

awk 'pattern { action }' file

常用示例

1. 打印文件的每一行
awk '{ print $0 }' file.txt
2. 打印文件的第二列
awk '{ print $2 }' file.txt
3. 打印文件中所有包含特定字符串的行
awk '/pattern/ { print $0 }' file.txt
4. 打印文件中第一列和第三列
awk '{ print $1, $3 }' file.txt
5. 使用自定义字段分隔符
awk -F',' '{ print $1, $2 }' file.csv
6. 计算文件中某列的总和
awk '{ sum += $1 } END { print "Sum:", sum }' file.txt
7. 计算文件中某列的平均值
awk '{ sum += $1; count++ } END { print "Average:", sum/count }' file.txt
8. 根据条件过滤行
awk '$1 > 10 { print $0 }' file.txt
9. 使用 BEGIN 和 END 块
awk 'BEGIN { print "Start of processing" } { print $0 } END { print "End of processing" }' file.txt

实际应用

假设有一个文件 data.txt,内容如下:

Alice 30
Bob 25
Charlie 35
David 28
1. 打印所有人的名字
awk '{ print $1 }' data.txt

输出:

Alice
Bob
Charlie
David
2. 打印年龄大于 25 的人
awk '$2 > 25 { print $0 }' data.txt

输出:

Alice 30
Charlie 35
David 28
3. 计算所有人的平均年龄
awk '{ sum += $2; count++ } END { print "Average age:", sum/count }' data.txt

输出:

Average age: 29.5

进阶用法

1. 使用数组
awk '
{count[$1]++
}
END {for (name in count) {print name, count[name]}
}
' data.txt

输出:

Alice 1
Bob 1
Charlie 1
David 1
2. 多文件处理
awk '
{total += $2
}
END {print "Total age across all files:", total
}
' file1.txt file2.txt

总结

awk 是一个非常强大的文本处理工具,适用于各种文本分析任务。通过理解其基本概念和常用语法,你可以高效地处理和分析数据。

http://www.lryc.cn/news/473570.html

相关文章:

  • @Controller 和 @RestController 区别
  • 【数据库设计】规范设计理论之数据依赖的公理系统(1)
  • Leetcode 合并两个数组
  • Native Crash 信号速查
  • 【工具变量】自由贸易试验区试点DID数据集(2003-2023年)
  • js-在数组中根据name查找出对应id(find与filter方法)
  • 推荐:自然语言处理方向的一些创新点
  • 成都睿明智科技有限公司抖音电商服务的领航者
  • 【大数据学习 | kafka】kafka的整体框架与数据结构
  • 隐私保护下的数据提取策略
  • vue 和 django 报 CORS(跨域资源共享,Cross-Origin Resource Sharing)是一种跨域访问的机制,
  • 「Mac畅玩鸿蒙与硬件3」鸿蒙开发环境配置篇3 - DevEco Studio 插件安装与配置
  • 【论文阅读】PGAN
  • 基于Unet卷积神经网络的脑肿瘤MRI分割
  • [java][基础]HTTPTomcatServlet
  • 【开源免费】基于SpringBoot+Vue.JS网上超市系统(JAVA毕业设计)
  • 【单片机】深入剖析USART与UART的区别
  • ‌Linux tac命令‌
  • 从简单的demo开始让您逐步了解GetX的用法
  • JAVA的动态代理
  • 「图文详解」Pycharm 远程服务器Debug
  • Golang反射在实际开发中的应用场景
  • 【二叉树】C非递归算法实现二叉树的先序、中序、后序遍历
  • Android——事件冲突处理
  • vue + elementui 全局Loading效果
  • 深度了解flink(十) JobManager(4) ResourceManager HA
  • 【万兴科技-注册_登录安全分析报告】
  • Android启动流程_Zygote阶段
  • 2022NOIP比赛总结
  • Leetcode 排序链表