当前位置:   article > 正文

Linux文本处理三剑客:awk(对具体文本的示例代码)

Linux文本处理三剑客:awk(对具体文本的示例代码)

在上一篇文章中,我们详细讲了awk的结构化命令。

主要有以下几种:

  • 条件控制语句:IF  、IF - ELSE 、IF - ELSE - IF
  • 循环语句:For、While
  • 循环结束语句:Break、Continue、Exit

 担心大家可能也想练习以下具体的文本操作。下面通过一个简单的示例代码,继续分享。

基础学习,可以回头查看:Linux文本处理三剑客:awk(结构化命令)

1.前期准备

首先为下面的示例代码,创建一个为file.txt的文件,内容可以是任意文本文件,例如:

  1. 姓名 性别 年龄
  2. 张三 男 20
  3. 李四 女 21
  4. 王五 男 22
  5. 赵老六 女 21
  6. 钱老七 男 25

示例代码

2. 使用 if 判断行数

  1. # 打印行号大于 5 的行
  2. awk '{ if (NR > 5) print }' file.txt

输出结果

钱老七	男	25

3. 使用 if-else 判断字段值

Awk

  1. # 根据性别打印不同的信息,$2表示第二列变量
  2. awk '{ if ($2 == "男") print "先生"; else print "女士" }' file.txt

输出结果

  1. 女士
  2. 先生
  3. 女士
  4. 先生
  5. 女士
  6. 先生

4. 使用 for 循环遍历数组

  1. # 统计每个单词出现的次数
  2. awk '{ for (i=1; i<=NF; i++) { count[$i]++; } } END { for (i in count) { print i, count[i] } }' file.txt

输出结果

  1. 王五 1
  2. 3
  3. 年龄 1
  4. 赵老六 1
  5. 姓名 1
  6. 2
  7. 李四 1
  8. 20 1
  9. 21 2
  10. 22 1
  11. 性别 1
  12. 钱老七 1
  13. 张三 1
  14. 25 1

5. 使用 while 循环读取文件

  1. # 读取文件内容并逐行打印
  2. awk '{
  3. while (getline < "file.txt" > 0) {
  4. print $0;
  5. }
  6. }' file.txt

输出结果

  1. 姓名 性别 年龄
  2. 张三 男 20
  3. 李四 女 21
  4. 王五 男 22
  5. 赵老六 女 21
  6. 钱老七 男 25

6. 使用 break 退出循环

  1. awk 'BEGIN {
  2. sum = 0
  3. while ((getline line < "file.txt") > 0) {
  4. split(line, fields, " ") # 使用空格分割每行内容到数组fields
  5. sum += fields[3] # 将第二个字段的值加到sum中
  6. if (sum > 50) break
  7. else print "Sum =", sum
  8. }
  9. }'

awk 会在 BEGIN 块中逐行读取 file.txt 的内容,使用 split 函数将每行内容以空格分割到 fields 数组中,然后将第二个字段的值加到 sum 变量中。如果 sum 的值超过了 50,就会跳出循环。 

输出结果

  1. Sum = 0
  2. Sum = 20
  3. Sum = 41

7. 使用 continue 跳过本次循环

  1. awk 'BEGIN {
  2. sum = 0
  3. while ((getline line < "file.txt") > 0) {
  4. split(line, fields, " ") # 使用空格分割每行内容到数组fields
  5. sum += fields[3] # 将第二个字段的值加到sum中
  6. if (sum > 50) continue
  7. else print "Sum =", sum
  8. }
  9. }'

如果 sum 的值超过了 50,就会执行 continue 语句,跳过本次循环的剩余部分,继续到下一行。

输出结果

  1. Sum = 0
  2. Sum = 20
  3. Sum = 41

8. 使用 exit 退出程序

  1. # 如果行号大于5则退出程序
  2. awk '{ if (NR <= 5) print; else exit }' file.txt

在这个awk命令中,NR是awk中的一个特殊变量,表示当前行号。上面的命令会打印file.txt文件的前五行,一旦行号超过5,就会执行exit语句来退出awk的执行,达到类似于break的效果在这个awk命令中,NR是awk中的一个特殊变量,表示当前行号。上面的命令会打印file.txt文件的前五行,一旦行号超过5,就会执行exit语句来退出awk的执行,达到类似于break的效果 

输出结果

  1. 姓名 性别 年龄
  2. 张三 男 20
  3. 李四 女 21
  4. 王五 男 22
  5. 赵老六 女 21

注意

  • 以上示例代码仅供参考,请根据实际情况进行修改。
  • 在编写 awk 脚本时,请注意空格和分号的使用。
  • "break"、"continue" 语句只能在循环或 switch 语句中使用,如果在这些结构之外使用,就会产生错误。

如果您觉得有些用处,熟练操作这些代码后,相信你会有一些收获。

欢迎在评论区留言,关注。谢谢您的阅读!

敬请关注!

往期学习笔记:

Windows系统开启Linux子系统(Ubuntu)

Linux常用命令(目录操作命令)

Linux常用命令:文件的创建、复制、移动、查找和删除命令

Linux常用命令:文本文件的查看与编辑

Linux常用命令:文本文件的拼接与分割

Linux常用命令:文件的权限管理

Linux常用命令:文件的下载、压缩与解压

Linux常用命令:常见的操作符

Linux常用命令:系统操作命令
 

 Linux文本处理三剑客:grep

Linux文本处理三剑客:sed

Linux文本处理三剑客:awk

Linux文本处理三剑客:awk(常用匹配模式)

Linux文本处理三剑客:awk(结构化命令)

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/207028
推荐阅读
相关标签
  

闽ICP备14008679号