课时120:awk实践_基础实践_优先级实践

1.1.4 优先级实践

学习目标

这一节,我们从 基础知识、简单实践、小结 三个方面来学习

基础知识

简介

powershell 复制代码
	awk为了体现程序的逻辑顺序,划分了三个代码段,其结构如下:
powershell 复制代码
格式显示:
	BEGIN{}: 读入第一行文本之前执行的语句,一般用来初始化操作
    {}: 逐行处理的执行命令
    END{}: 处理完最后以行文本后执行,一般用来处理输出结果

简单实践

实践1-分结构实践

powershell 复制代码
BEGIN设定数据处理的前置准备
[root@localhost ~]# awk 'BEGIN{OFS=":"} {print NR,$0}' awk.txt
1:nihao awk1 awk2 awk3
2:nihao awk4 awk5 awk6
3:nihao awk7 awk8 awk9

{}定制输出的内容样式
[root@localhost ~]# awk '{ print "第一列:"$1,"第二列:"$2 }' awk.txt
第一列:nihao 第二列:awk1
第一列:nihao 第二列:awk4
第一列:nihao 第二列:awk7

END设定信息处理完毕后的收尾动作
[root@localhost ~]# awk 'END{printf "----------------\n行数总计: %2d\n", NF}' awk.txt
----------------
行数总计:  4

实践2-优先级演示

powershell 复制代码
[root@localhost ~]# awk -F: 'BEGIN{print "begin中的NR值:" NR}  NR==11 {print "命令中的NR值: " NR}END{print "END中的NR值: " NR}' /etc/passwd
begin中的NR值:0
命令中的NR值: 11
END中的NR值: 23
结果可知:
	begin的优先级 > 命令优先级 > END的优先级

实践3-组合演练

powershell 复制代码
BEGIN 和 {} 实现信息的头部格式化
[root@localhost ~]# awk 'BEGIN{print "第一列\t第二列\n----------------"}{print $1"\t"$2}' awk.txt
第一列  第二列
----------------
nihao   awk1
nihao   awk4
nihao   awk7
powershell 复制代码
完全组合实现信息的头部和尾部格式化操作
[root@localhost ~]# awk 'BEGIN{print "第一列\t第二列\n----------------";total=0;}{print $1"\t"$2;total = NR}END{printf "----------------\n行数总计: %2d\n", total}' awk.txt
第一列  第二列
----------------
nihao   awk1
nihao   awk4
nihao   awk7
----------------
行数总计:  3
powershell 复制代码
统计文件格式化
[root@localhost ~]# awk -F":" 'BEGIN{printf "---------------------------\n%-12s|%9s|\n---------------------------\n","用户名","shell类型"}{printf "%-15s|%10s|\n---------------------------\n",$1,$7}END{printf "用户总数总: %2d\n", NR}' passwd.txt
---------------------------
用户名         |  shell类型|
---------------------------
root           | /bin/bash|
---------------------------
用户总数总:  1
powershell 复制代码
定制配置考试成果表
[root@localhost ~]# cat course_scores.txt
张三 	100	 56	   99
李四 	90	 68	   89
王五 	50	 78	   67
赵六 	80	 99    89

格式化显示
[root@localhost ~]# awk 'BEGIN{printf "----------------------\n|%-3s|%2s|%2s|%2s|\n----------------------\n","姓名","语文","数学","历史";} NR>=2 {printf "|%-3s|%4d|%4d|%4d|\n",$1,$2,$3,$4} END{printf "----------------------\n学生 总数总: %2d\n", NR}' course_scores.txt
----------------------
|姓名 |语文|数学|历史|
----------------------
|张三 | 100|  56|  99|
|李四 |  90|  68|  89|
|王五 |  50|  78|  67|
|赵六 |  80|  99|  89|
----------------------
学生总数总:  5

小结

复制代码
相关推荐
mzhan01740 分钟前
Linux: config: CRYPTO_USER_API_AEAD
linux·安全·module
wangjialelele1 小时前
【SystemV】基于建造者模式的信号量
linux·c语言·c++·算法·建造者模式
源远流长jerry1 小时前
Linux 网络虚拟化深度解析:从 veth 设备对到容器网络实战
linux·运维·服务器·网络·性能优化·php
|_⊙2 小时前
Linux 深入理解文件(Ext2文件系统:上)
linux·运维·数据库
kidwjb2 小时前
Linux共享内存
linux·服务器·进程间通信
红茶要加冰2 小时前
七、正则表达式
linux·运维·正则表达式·shell
ALINX技术博客2 小时前
【黑金云课堂】FPGA技术教程Linux开发:串行通信接口与实时时钟模块
linux·fpga开发
sulikey2 小时前
ext2 GDT 块组描述符表 详细技术拆解
linux·操作系统·文件系统·ext2·gdt·ext·块组描述符
QuestLab2 小时前
Ollama在Linux上安装的详细记录
linux·运维·服务器
Strugglingler2 小时前
【Linux PL011驱动支持RS485】
linux·uart·rs485·pl011