品牌网站建设策划方案,网络运营师资格证,网页脚本语言有哪些,什么平台可以接国外订单一 概述
awk命令是一种分析和处理文本文件的编程工具。它的功能非常强大#xff0c;是Linux/Unix系统中最常用的过滤工具。 awk内建变量#xff1a; NF 整个数据行(即$0)拥有的字段总数 NR 当前awk所处理的数据行的编号 $0 当前awk所处理的数据行 $1 数据行的第1个字段 $2 数…一 概述
awk命令是一种分析和处理文本文件的编程工具。它的功能非常强大是Linux/Unix系统中最常用的过滤工具。 awk内建变量 NF 整个数据行(即$0)拥有的字段总数 NR 当前awk所处理的数据行的编号 $0 当前awk所处理的数据行 $1 数据行的第1个字段 $2 数据行的第2个字段 $NF 数据行的最后1个字段
注意 和shell脚本中的变量不同awk中的变量可以直接使用不需要加上$符号
二 awk简单实例
2.1 查看服务器登入者的用户名和IP地址
last | awk {print $1 \t $3}
last -n 10 | awk {print $1 \t $3}2.2 查找root用户的默认shell 方法一
awk -F: /^root/ {print $7} /etc/passwd
执行结果为/bin/bash方法二
awk -F: {if ($1 root) print $7} /etc/passwd
执行结果为/bin/bash上述两个命令的执行结果相同其中 -F设置分隔符为冒号默认分割符为空格或者[Tab] ‘/^root/ {print $7}’通过正则表达式匹配以root开头的行匹配成功后打印该行的第7列即第7个字段 方法二中使用了条件语句为了实际编程需要awk命令中可以嵌入条件语句条件语句的关键字是if 下图所示为条件语句的运算符 大于小于大于或等于小于或等于等于
! 不等于2.3 从详细路径中提取文件名
echo /root/dummy_app/tools/cloud/make_update_package.sh | awk -F/ {print $NF}-F设置分隔符为正斜杠/默认分割符为空格或者[Tab] $NF表示数据行的最后1个字段 上述命令的执行结果为make_update_package.sh 2.4 计算某个目录下所有文件大小的总和
ls -l /boot | grep ^- | awk BEGIN{totalsize 0;} {totalsize $5;} END{print totalsize}从上述语句可以看出awk中的变量可以直接使用不需要加上$符号 ls -l /boot | grep ^-表示只查找普通文件 ls -l /boot | grep ^d表示只查找目录 BEGIN表示awk在开始处理数据行之前先执行BEGIN关键字指定的操作即BEGIN关键字后面花括号里的内容通常来说都是些打印标题信息、初始化变量等操作 END表示awk在处理完所有数据行之后再执行END关键字指定的操作即END关键字后面花括号里的内容通常来说都是些打印结束栏、输出最终结果等操作 注意 无论是BEGIN还是END它们都只会执行一次 2.5 解析配置文件-实例一 下图所示为配置文件详细内容
index_file index_file
payload_type update_full
system_version v0.1
kernel_version v4.19.115
digest_type md5
private_pem /etc/menxian_private.pem解析脚本如下所示
#! /bin/sh
package_config$1index_file$(awk /^index_file/ {print $2} $package_config)
payload_type$(awk /^payload_type/ {print $2} $package_config)
system_version$(awk /^system_version/ {print $2} $package_config)
kernel_version$(awk /^kernel_version/ {print $2} $package_config)
digest_type$(awk /^digest_type/ {print $2} $package_config)
private_pem$(awk /^private_pem/ {print $2} $package_config)
echo $index_file
echo $payload_type
echo $system_version
echo $kernel_version
echo $digest_type
echo $private_pem运行脚本并且查看结果
./parse.sh package_config
index_file
update_full
v0.1
v4.19.115
md5
/etc/menxian_private.pem我们抽取一行进行分析
index_file$(awk /^index_file/ {print $2} $package_config)/^index_file/表示匹配以index_file开头的行 /index_file$/表示匹配以index_file结尾的行 $()将整个命令执行结果赋值给变量
需要注意的是$()会将多行的执行结果合并成一行然后赋值给变量 咱们可以使用如下命令进行测试
result$(df -hT); echo $result;2.6 解析配置文件-实例二 下图所示为配置文件详细内容
[payload_type]
update_full[system_version]
v1.4.0[kernel_version]
v4.19.115[digest_type]
md5解析脚本如下所示
#! /bin/sh
configfile$1payload_type$(awk /\[payload_type]/ {getline; print $1} $configfile)
system_version$(awk /\[system_version]/ {getline; print $1} $configfile)
kernel_version$(awk /\[kernel_version]/ {getline; print $1} $configfile)
digest_type$(awk /\[digest_type]/ {getline; print $1} $configfile)
echo $payload_type
echo $system_version
echo $kernel_version
echo $digest_type运行脚本并且查看结果
./parse.sh payload_desc
update_full
v1.4.0
v4.19.115
md5我们同样抽取一行进行分析
payload_type$(awk /\[payload_type]/ {getline; print $1} $configfile)/[payload_type]/表示匹配包含[payload_type]的行在awk中[符号需要使用\[进行转义]符号就不需要