脚本中的awk是一个强大的文本处理工具,可以对文本数据进行模式扫描和处理。awk的基本语法:
awk 'pattern {action}' file
以上,pattern是想匹配的文本模式,action是当模式匹配时执行的命令,file是要处理的文件,在提供脚本中,awk被用来提取特定信息具体应用方式华纳云总结在下文!
提取适配器名称:
interface=$(echo "$line" | awk '{print $2}')
其中 awk '{print $2}'的作用是打印每行的第二个字段,在ip addr show命令的输出中,第二个字段通常是网络接口的名称(例如eth0、wlan0等)。所以,这个命令提取了每行的适配器名称。提取IP地址:
ip_address=$(echo "$line" | grep -oP '(?<=inet\s)\d+\.\d+\.\d+\.\d+')
以上命令时间没有使用awk而使用grep和Perl兼容的正则表达式,这个命令可以提取inet开头,后面跟着一个或者多个表格,然后是IPv4地址的模式。(?<=inet\s)是一个正向后查找,意味着它会匹配inet后面跟着一个空格的位置,但不包括inet和空格本身。\d+\.\d+\.\d+\.\d+匹配一个标准的IPv4地址。提取类型:
type=$(echo "$line" | awk '{print $3}')
这里,awk '{print $3}'的作用是打印每行的第三个字段。在ip addr show命令的输出中,第三个字段通常是地址类型,例如inet(IPv4)或inet6(IPv6)。
总体看,awk是在脚本中用于提取每行特定字段,这些字段分别是适配器名称和地址类型,而grep命令被用来提取符合特定正则表达式的IP地址。这些提取的信息会被格式化后输出。另外awk还可以用于多种文本分析和处理任务。比如,模式匹配:
awk '/pattern/ {print $0}' file
比如字段处理,可以提取、修改或者删除特定字段:
awk '{print $1, $3}' file
在文本中替换字符:
awk '{gsub("old", "new", $0)}1' file
进行算术运算:
awk '{sum += $1} END {print sum}' file
条件语句,根据不同条件执行不同操作:
awk '{if ($1 > 10) print $1}' file
循环控制,使用循环结构来处理文本:
awk '{for (i = 1; i <= NF; i++) print $i}' file
关联数组,使用数组存储和访问数据:
awk '{arr[$1] += $2} END {for (key in arr) print key, arr[key]}' file
函数定义,定义自定义函数来处理数据:
awk 'function square(x) {return x * x} {print square($1)}' file
输入和输出重定向,从标准输入读取数据或者把结果输出到标准输出。
awk '{print $0}' file
echo "some text" | awk '{print $0}'
用于同时处理多个文件:
awk 'NR==FNR {a[i++]=$1} NR!=FNR {print $1, a[$1]}' file1 file2
处理匹配特定模式的行:
awk '/start/, /end/' file
用于字段分隔符(使用非空格字符作为字段分隔符):
awk -F':' '{print $1, $2}' file
可以统计记录数和字段数:
awk '{print NR, NF}' file
用awk的内置变量,用NR、NF等:
awk '{print NR, $NF}' file
正则表达式进行复杂的模式匹配:
awk '/^[0-9]+/ {print $1}' file
综上,可以看出awk的灵活性和功能让其成为文本处理的强大工具,适用于日志分析、数据提取、报告生成等多种场景。