【Liunx】文本处理akw命令

awk 是一个强大的文本处理工具,用于在 Unix 和类 Unix 操作系统中进行模式扫描和处理。awk 能够从输入文件中读取数据,并对这些数据进行复杂的文本处理。

以下是 awk 的一些主要特性:

  1. 模式匹配awk 可以搜索特定的模式,并在找到匹配行时执行相应的操作。

  2. 字段处理awk 能够识别输入行中的字段(默认由空格分隔),并允许用户通过 $1$2 等变量访问这些字段。

  3. 内置变量awk 提供了一系列内置变量,如 NF(当前行的字段数)、NR(已处理的记录数)等。

  4. 编程能力awk 支持变量赋值、算术运算、逻辑运算、控制结构(如 if-else、while、for 循环)等,使其成为一种完整的编程语言。

  5. 正则表达式awk 支持使用正则表达式进行模式匹配。

  6. 多行模式awk 可以处理多行模式,允许用户对多行文本进行操作。

  7. 用户定义函数awk 允许用户定义自己的函数,以复用代码和提高处理效率。

  8. 模式-动作对awk 的核心是模式-动作对,其中模式指定要匹配的文本,动作是在找到匹配时执行的命令。

  9. 跨平台awk 同样被移植到了多种操作系统,包括 Windows。

awk 命令的基本语法如下:

awk 'pattern { actions }' file

或者

awk -Fdelimiter 'pattern { actions }' file

其中 -Fdelimiter 用于指定字段分隔符,pattern 是要搜索的模式,actions 是在找到匹配时执行的一系列命令,file 是要处理的文件。

一些常见的 awk 用法示例:

  • 打印第二列

    awk '{print $2}' file
    
  • 计算行数

    awk 'END {print NR}' file
    
  • 按行处理

    awk '{sum += $1} END {print sum}' file
    
  • 条件打印

    awk '$3 > 100 {print $1, $3}' file
    
  • 使用正则表达式

    awk '/^Error/ {print $0}' file
    
  • 自定义分隔符

    awk -F: '{print $1}' /etc/passwd
    

awk 提供了一系列内置变量,这些变量可以用来控制 awk 的行为或存储关于当前处理的数据的信息。以下是一些常用的 awk 内置变量:

  1. $0:整个当前记录,即当前行。

  2. $1, $2, …, $NF:当前记录的字段,其中 $1 是第一个字段,$2 是第二个字段,以此类推,$NF 是最后一个字段。

  3. NF:当前记录中的字段总数。

  4. NR:已经处理的记录总数(行数)。

  5. FNR:当前文件的记录数(行数)。当处理多个文件时,每个文件的 FNR 都是独立的。

  6. FS:字段分隔符,默认为空格或制表符。

  7. OFS:输出字段分隔符,默认与 FS 相同。

  8. RS:记录分隔符,默认为换行符。

  9. ORS:输出记录分隔符,默认与 RS 相同。

  10. FILENAME:当前处理的文件名。

  11. ARGC:命令行参数的数量。

  12. ARGV:命令行参数的数组。

  13. ENVIRON:环境变量的数组。

练习题

练习 1:打印文件中每行的第二个字段

文件内容 (data.txt):

apple 5 banana
orange 10 mango
grape 7 cherry

命令

awk '{print $2}' data.txt

预期结果

5
10
7
练习 2:计算文件中包含某个单词的行数

文件内容 (data.txt):

apple
banana
apple
cherry
apple

命令

awk '/apple/ {count++} END {print count}' data.txt

预期结果

3
练习 3:将文件中的字段以逗号分隔符输出

文件内容 (data.txt):

apple 5 banana
orange 10 mango
grape 7 cherry

命令

awk '{printf "%s,%s,%s\n", $1, $2, $3}' data.txt

预期结果

apple,5,banana
orange,10,mango
grape,7,cherry
练习 4:计算文件中每行第一个字段的总和

文件内容 (data.txt):

1 2 3
4 5 6
7 8 9

命令

awk '{sum += $1} END {print sum}' data.txt

预期结果

12
练习 5:打印文件中每行最后一个字段

文件内容 (data.txt):

apple 5 banana cherry
orange 10 mango cherry
grape 7 cherry berry

命令

awk '{print $(NF)}' data.txt

预期结果

cherry
cherry
berry
练习 6:打印文件中第二个字段大于5的行

文件内容 (data.txt):

apple 3 banana
orange 10 mango
grape 7 cherry
pear 2 apple

命令

awk '$2 > 5' data.txt

预期结果

orange 10 mango
grape 7 cherry
练习 7:将文件中的字段分隔符设置为冒号,并打印第一个字段

文件内容 (data.txt):

apple:5:banana
orange:10:mango
grape:7:cherry

命令

awk -F: '{print $1}' data.txt

预期结果

apple
orange
grape

#练习 8:计算文件中每个单词出现的次数

文件内容 (data.txt):

apple banana apple cherry banana grape

命令

awk '{for(i=1; i<=NF; i++) count[$i]++} END {for(word in count) print word, count[word]}' data.txt

预期结果

apple 2
banana 2
cherry 1
grape 1
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

抓跟ミgragon

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值