Linux-awk

Linux-awk

起男 33 2025-03-05

Linux-awk

awk 是 Linux 和 Unix 系统中一个强大的文本处理工具,用于模式扫描和处理。它可以将文本按字段处理,支持复杂的逻辑和计算。

基本语法

awk '模式 {动作}' 文件名
  • 模式:指定要匹配的条件(可选)。
  • 动作:对匹配的行执行的操作。
  • 文件名:要处理的文件。

常用变量

变量 描述
$0 整行内容。
$1, $2, ... 第 1、2 个字段。
NF 当前行的字段数量。
NR 当前行号。
FS 字段分隔符(默认是空格)。
OFS 输出字段分隔符(默认是空格)。

示例

打印文件内容

  • 打印文件的每一行:

    awk '{print}' file.txt
    
  • 打印文件的第 1 列:

    awk '{print $1}' file.txt
    
  • 打印文件的第 1 列和第 3 列:

    awk '{print $1, $3}' file.txt
    

条件匹配

  • 打印包含 error 的行:

    awk '/error/ {print}' file.txt
    
  • 打印第 2 列大于 100 的行:

    awk '$2 > 100 {print}' file.txt
    

计算

  • 计算文件中第 2 列的总和:

    awk '{sum += $2} END {print sum}' file.txt
    
  • 计算文件中第 2 列的平均值:

    awk '{sum += $2; count++} END {print sum/count}' file.txt
    

字段分隔符

  • 使用 : 作为字段分隔符,打印第 1 列:

    awk -F: '{print $1}' file.txt
    
  • 使用 : 作为字段分隔符,; 作为输出字段分隔符:

    awk -F: -v OFS=";" '{print $1, $2}' file.txt
    

多条件处理

  • 打印第 2 列大于 100 且第 3 列小于 50 的行:

    awk '$2 > 100 && $3 < 50 {print}' file.txt
    

内置函数

  • 计算每行的字段数量:

    awk '{print NF}' file.txt
    
  • 计算文件的行数:

    awk 'END {print NR}' file.txt
    

高级用法

BEGIN和END

  • BEGIN 块在处理文件前执行,END 块在处理文件后执行。

  • 示例:打印文件的行数和列数:

    awk 'BEGIN {print "Start Processing"} {print $0} END {print "Total Lines:", NR}' file.txt
    

自定义变量

  • 使用自定义变量进行计算:

    awk '{total += $2} END {print "Total:", total}' file.txt
    

数组

  • 使用数组统计第 1 列的出现次数:

    awk '{count[$1]++} END {for (item in count) print item, count[item]}' file.txt