awk(基础):文本处理三剑客
侧边栏壁纸
  • 累计撰写 64 篇文章
  • 累计收到 1 条评论

awk(基础):文本处理三剑客

soulio
2024-09-11 / 0 评论 / 4 阅读 / 正在检测是否收录...

awk​ 提供了一种灵活的方式来处理文本文件,可以用于数据提取、数据转换、报告生成等任务。

Linux文本处理三剑客:

  • awk
  • sed
  • grep

一、基本语法

awk '模式 { 动作 }' 要处理的文件

二、工作原理

  • awk​ 逐行扫描文件,将每一行视为一个记录(record)。
  • 用户可以定义一个模式(pattern),当某一行满足该模式时,执行对应的动作(action)。
  • 动作可以是打印、计算、格式化输出等操作。

三、常用功能

  • 字段分隔符:默认情况下,awk​ 使用空格作为字段分隔符,但可以通过 -F​ 参数指定其他分隔符。例如,awk -F',' '{print $1}' filename​ 使用逗号作为字段分隔符。

  • 内置变量


    • $0​:所有字段。
    • $1​, $2​, ...:第一个字段、第二个字段,以此类推。
    • NF​:字段数。
    • NR​:当前行号。
    • FS​:字段分隔符。
    • OFS​:输出字段分隔符。
  • 条件匹配:可以使用条件表达式进行匹配,例如 /pattern/ { action }​。

  • 循环awk​ 支持 for​、while​ 循环,可以在动作部分使用。

  • 内置函数awk​ 提供了许多内置函数,如数学函数、字符串函数等,可以在动作部分使用。

  • 输出格式化:可以使用 printf​ 函数对输出进行格式化。

四、简单示例

1. 筛选列

示例文本如下:

Alice 25
Bob 30
Charlie 28
David 22
  • 输出指定列

    第一列,姓名

    #命令
    awk '{print $1}' data.txt
    
    #输出
    Alice
    Bob
    Charlie
    David
    

    第二列,年龄

    #命令
    awk '{print $2}' data.txt
    
    #输出
    25
    30
    28
    22
    

2. 计算数据

假设有一个包含数字的文件 numbers.txt​,内容如下:

10
20
30
40

计算所有数字的总和

#命令
awk '{sum += $1} END {print sum}' numbers.txt

#输出
100

3. 条件匹配的行

假设有一个包含学生成绩的文件 grades.txt​,内容如下:

Alice 85
Bob 70
Charlie 92
David 65

打印成绩大于等于80分的学生

#命令
awk '$2 >= 80 {print $1, $2}' grades.txt

#输出
Alice 85
Charlie 92

4. 自定义分隔符

假设有一个以逗号分隔的数据文件 data.csv​,内容如下:

Alice,25
Bob,30
Charlie,28
David,22

使用逗号作为分隔符打印第二列

#命令
awk -F',' '{print $2}' data.csv

#输出
25
30
28
22

5. 格式化输出

假设有一个包含学生成绩的文件 grades.txt​,内容如下:

Alice 85
Bob 70
Charlie 92
David 65

格式化输出姓名和成绩

#命令
awk '{printf "Name: %-10s Grade: %d\n", $1, $2}' grades.txt

#输出
Name: Alice      Grade: 85
Name: Bob        Grade: 70
Name: Charlie    Grade: 92
Name: David      Grade: 65

这些示例展示了 awk​ 命令在处理文本文件时的一些常见用法。根据具体的需求,你可以根据这些示例进行调整和扩展。

五、复杂示例

用awk命令把目录的权限、属组、link​提出来看一下:

$ ll /var | awk '{printf "%-10s %-8s ", $1, $4; for (i=9; i<=NF; i++) printf "%s ", $i; print ""}'
总计
drwxr-xr-x root     ./
drwxr-xr-x root     ../
drwxr-xr-x root     backups/
drwxr-xr-x root     cache/
drwxrwsrwt whoopsie crash/
drwxr-xr-x root     dsm/
drwxr-xr-x root     lib/
drwxrwsr-x staff    local/
lrwxrwxrwx root     lock -> /run/lock/
drwxrwxr-x syslog   log/
drwxrwsr-x mail     mail/
drwxrwsrwt whoopsie metrics/
drwxr-xr-x root     opt/
lrwxrwxrwx root     run -> /run/
drwxr-xr-x root     snap/
drwxr-xr-x root     spool/
drwxrwxrwt root     tmp/

当然这意义不大,还复杂。

六、可以做到哪些

  1. 文本处理


    • 提取数据:可以从文本文件中提取特定字段、行或数据。
    • 格式化输出:可以根据需要对数据进行格式化输出,包括对齐、填充等。
    • 搜索和替换:可以搜索文本文件中的特定模式,并进行替换或其他操作。
  2. 数据处理


    • 计算:可以对数据进行数学运算,如求和、平均值等。
    • 统计:可以统计数据文件中的行数、字段数,或者根据条件进行统计。
    • 过滤和排序:可以根据条件过滤数据,或者对数据进行排序操作。
  3. 报告生成


    • 生成报告:可以根据数据生成报告、摘要或汇总信息。
    • 格式化输出:可以将数据以特定格式输出,适用于生成报表或日志文件。
  4. 数据转换


    • 字段分割:可以根据指定的分隔符对数据进行分割和处理。
    • 数据转换:可以将数据从一种格式转换为另一种格式。
  5. 条件匹配


    • 根据条件处理数据:可以根据条件匹配特定行或字段,并执行相应的操作。
  6. 自定义功能


    • 自定义函数:可以在 awk​ 脚本中定义和使用自定义函数,增强灵活性和功能性。
    • 数组操作:支持数组操作,可以用于更复杂的数据处理任务。
  7. 灵活性和扩展性


    • awk​ 提供了丰富的内置函数和变量,以及灵活的语法,使其非常适合处理各种文本和数据处理任务。
    • 可以结合其他 Unix 工具和管道操作,实现更复杂的数据处理流程。

七、怎么做

  • 模式组合:可以使用逻辑运算符组合多个模式。
  • 自定义函数:可以在 awk​ 脚本中定义和调用自定义函数。
  • 数组操作awk​ 支持数组操作,可以用于更复杂的数据处理。

本文共 1075 个字数,平均阅读时长 ≈ 3分钟
0

海报

正在生成.....

评论 (0)

取消