Awk编程语言:介绍、print语句与工作原理

需积分: 46 1 下载量 24 浏览量 更新于2024-09-13 收藏 129KB PDF 举报
Awk是一种强大的文本处理工具,由Alfred Aho、Peter Weinberger和Brian Kernighan共同开发,主要用于处理结构化数据并生成格式化的输出。它常用于文件分析、数据过滤和转换,特别适合在符合特定正则表达式的行上执行操作。 Awk的核心概念是基于记录(records)和字段(fields)来解析文本文件。每个记录由空格、制表符或换行符分隔成若干个字段。Awk支持变量、条件和循环,以及基本的算术运算和字符串操作,使得数据处理能力非常强大。 Awk的基本语法格式如下: ```awk 'pattern1' {actions} 'pattern2' {actions} ... file ``` 在这个格式中,`pattern1`, `pattern2`是正则表达式,用于匹配文本行;`actions`是在匹配时执行的操作。可以有多个正则表达式和相应的操作,`file`是要处理的输入文件名。为了防止Shell对单引号内的内容进行解释,通常使用单引号括起正则表达式。 工作流程如下: 1. Awk逐行读取文件内容。 2. 对于每一行,根据提供的正则表达式顺序进行匹配,匹配成功的行执行对应的action。 3. 如果没有匹配,则跳过该行,不执行action。 4. 如果既无pattern又无action,则默认打印行内容。 5. `{}`表示一个空action,不执行任何操作,与无action不同。 6. action中的命令需要用分号隔开。 例如,创建一个名为`employee.txt`的文件,内容如下: ``` $ cat employee.txt 100 Thomas Manager Sales $5,000 200 Jason Developer Technology $5,500 300 Sanjay Sysadmin ``` 你可以用Awk处理这个文件,提取特定的信息,如员工编号、姓名等。常见的使用场景包括筛选工资超过某个阈值的员工,或者按特定字段排序输出等。 Awk是一个灵活且高效的文本处理工具,适用于自动化数据清洗、数据分析和报告生成等任务。学习和掌握Awk的使用将极大地提升在处理大量结构化数据时的效率。

#! /system/bin/sh # 监听按键的设备文件和按键值 DEVICE_FILE="/dev/input/event0" KEY_VALUE="00a5" KEY_VALUE2="00a3" DISPLAY_ID=$(dumpsys window | awk '/displayId=/ {print $1}' | sed 's/displayId=//g') local id1=$(echo $DISPLAY_ID | awk '{print $1}') local id2=$(echo $DISPLAY_ID | awk '{print $2}') # 按键副屏打开 function key_state() { if [ "$id1" -gt "$id2" ]; then echo $id1 am start -n com.tencent.start.tv/com.tencent.start.ui.SplashActivity --display "$id1" else echo $id2 am start -n com.tencent.start.tv/com.tencent.start.ui.SplashActivity --display "$id2" fi } # 监听按键事件 function listen_key_events() { # 判断设备文件是否存在 if [ ! -e "$DEVICE_FILE" ]; then echo "Error: Device file '$DEVICE_FILE' does not exist." exit 1 fi # 监听按键事件 getevent -q "$DEVICE_FILE" | while read line; do local keycode=$(echo "$line" | awk '{print $2}') local value=$(echo "$line" | awk '{print $3}') local id_activity=$(dumpsys window | grep display | grep 'imeInputTarget' | awk '{print $4,$7}' | cut -d'}' -f1) local focus=$(dumpsys window | grep "mCurrentFocus" | tail -n 1 | awk '{print $NF}' | cut -d'}' -f1) local activity=$(echo "$id_activity" | grep "$focus"| awk '{print $NF}') if [ "$keycode" = "$KEY_VALUE" ]; then if [ "$value" = "00000001" ]; then key_state fi elif [ "$keycode" = "$KEY_VALUE2" ]; then if [ "$value" = "00000001" ]; then if [ "$activity" = "$(echo $id_activity | awk '{print $2}')" ] then echo "$(echo $id_activity | awk '{print $4}')" am start -n "$(echo $id_activity | awk '{print $4}')" --display "$(echo $id_activity | awk '{print $3}')" else echo "$(echo $id_activity | awk '{print $2}')" am start -n "$(echo $id_activity | awk '{print $2}')" --display "$(echo $id_activity | awk '{print $1}')" fi fi fi done } # 启动按键监听 listen_key_events 优化

2023-06-03 上传