【linux】(7)文本分析awk

作者 : admin 本文共1898个字,预计阅读时间需要5分钟 发布时间: 2024-06-11 共1人阅读

awk 用于分析、过滤和生成报告。

基本用法

awk 'pattern {action}' filename

常用选项

  1. -F:指定字段分隔符

    awk -F',' '{print $1}' filename
    

    例子:使用逗号作为字段分隔符,并打印第一列。

  2. -v:定义变量

    awk -v var=value 'BEGIN {print var}'
    

    例子:定义变量并在 BEGIN 块中使用。

  3. -f:从文件中读取 awk 脚本

    awk -f script.awk filename
    

基本操作

打印文本
  1. 打印整行

    awk '{print}' filename
    

    例子:打印文件 example.txt 的所有行。

  2. 打印指定字段

    awk '{print $1, $2}' filename
    

    例子:打印文件 example.txt 的第一列和第二列。

  3. 添加文本

    awk '{print "Line:", $0}' filename
    

    例子:在每行前添加 Line:

过滤文本
  1. 根据模式过滤行

    awk '/pattern/' filename
    

    例子:打印包含 hello 的行。

    awk '/hello/' example.txt
    
  2. 根据字段值过滤行

    awk '$1 > 100' filename
    

    例子:打印第一列大于 100 的行。

    awk '$1 > 100' example.txt
    
内置变量
  1. $0:表示整行
  2. $1, $2, ...:表示第 1 列、第 2 列,依此类推
  3. NR:表示行号
  4. NF:表示字段数
  5. FS:字段分隔符
  6. OFS:输出字段分隔符

高级操作

计算和统计
  1. 求和

    awk '{sum += $1} END {print sum}' filename
    

    例子:计算第一列的和。

    awk '{sum += $1} END {print sum}' example.txt
    
  2. 计数

    awk 'END {print NR}' filename
    

    例子:统计行数。

    awk 'END {print NR}' example.txt
    
条件语句
  1. if 语句

    awk '{if ($1 > 100) print $1}' filename
    

    例子:打印第一列大于 100 的值。

    awk '{if ($1 > 100) print $1}' example.txt
    
  2. if-else 语句

    awk '{if ($1 > 100) print $1; else print "less"}' filename
    

    例子:打印第一列大于 100 的值,否则打印 less

    awk '{if ($1 > 100) print $1; else print "less"}' example.txt
    
循环
  1. for 循环
    awk '{for (i = 1; i <= NF; i++) print $i}' filename
    

    例子:打印每行的每个字段。

    awk '{for (i = 1; i <= NF; i++) print $i}' example.txt
    
内置函数
  1. 字符串长度

    awk '{print length($1)}' filename
    

    例子:打印第一列的字符串长度。

    awk '{print length($1)}' example.txt
    
  2. 子字符串

    awk '{print substr($1, 1, 3)}' filename
    

    例子:打印第一列的前 3 个字符。

    awk '{print substr($1, 1, 3)}' example.txt
    
  3. 正则表达式匹配

    awk '$1 ~ /^[0-9]+$/' filename
    

    例子:打印第一列是数字的行。

    awk '$1 ~ /^[0-9]+$/' example.txt
    

综合示例

  1. 处理 CSV 文件

    awk -F',' '{print $1, $2}' filename.csv
    

    例子:打印 CSV 文件的第一列和第二列。

    awk -F',' '{print $1, $2}' example.csv
    
  2. 统计字段出现次数

    awk '{count[$1]++} END {for (word in count) print word, count[word]}' filename
    

    例子:统计第一列中每个值出现的次数。

    awk '{count[$1]++} END {for (word in count) print word, count[word]}' example.txt
    
  3. 多条件过滤

    awk '$1 > 100 && $2 < 50' filename
    

    例子:打印第一列大于 100 且第二列小于 50 的行。

    awk '$1 > 100 && $2 < 50' example.txt
    

从文件读取 awk 脚本

可以将 awk 脚本存储在文件中,然后使用 -f 选项从文件中读取。

  1. 脚本文件 script.awk 内容

    {print $1, $2}
    
  2. 执行脚本

    awk -f script.awk filename
    

使用 awk 处理多行输出

  1. 搜索多行模式

    awk '/start_pattern/,/end_pattern/' filename
    
  2. 与其他命令结合使用

    grep 'pattern' filename | awk '{print $1}'
    
    ps aux | awk '{print $1, $2}'
    
本站无任何商业行为
个人在线分享 » 【linux】(7)文本分析awk
E-->