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

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.kler.cn/a/373826.html

相关文章:

  • Linux 文件内容显示
  • 【机器学习】 15. SVM 支撑向量机 support vector machine,拉格朗日,软边界,核函数
  • 为什么 C 语言数组是从 0 开始计数的?
  • docker占用磁盘过多问题
  • leetcode344. Reverse String
  • JVM 调优深度剖析:优化 Java 应用的全方位攻略(一)
  • 特斯联巨亏数十亿:毛利率剧烈波动下滑,高管动荡引发关注
  • 一文详解高光谱数据python处理包spectral(SPy)
  • Linux_03 Linux 常用命令——find、ls
  • MyBatis常见面试题总结
  • wps Excel下拉框生成填充及下拉框内容颜色格式修改
  • 云安全联盟倡导对关键基础设施实施零信任
  • ffmpeg视频滤镜:网格-drawgrid
  • MAC | 应用全屏快捷键 |浏览器隐藏导航栏
  • 【测试平台】【前端VUE】工具页面学习记录
  • SSH登录介绍
  • 1024·工作流智能体挑战赛结果出炉
  • JavaScript闭包(Closure)详解与应用实例
  • 财经领域波澜现,茅台价格动心弦。供需关系新篇章,高端白酒市场寒。经济转型消费变,电商大促供需悬。经济压力需求减,理性消费新风传。
  • 智能视频多语言AI配音/翻译工具
  • Java项目实战II基于微信小程序的马拉松报名系统(开发文档+数据库+源码)
  • 【ArcGISPro】宣布推出适用于 ArcGIS 的 AI 助手
  • 51c深度学习~合集6
  • 【系统设计】探索数据库的世界:轻松掌握基本原理
  • 初识字节码文件--Java
  • 【C#】搭建环境之CSharp+OpenCV