首页 > 解决方案 > 使用 awk 一次性分配两个变量

问题描述

我有一个日志,每分钟都会收到以下数据:

ID: Unit3443 IP: 192.168.1.1 MAC: 00:20:c0:04:e8:ab
ID: Unit2222 IP: 192.168.2.2 MAC: 00:40:c0:05:e8:bc

我用 tail -1 /File 抓住最后一行

是否可以一口气将这两个条目都分配给变量?目前我有

UnitID=`tail -1 $File|awk '{print $1}'`
UnitIP=`tail -1 $File|awk '{print $2}'`

这可行,但它需要读取文件两次,我担心的是在第二次读取期间,tail -1 的输出将不再相同。

是否可以在一次读取行中分配这两个变量?

标签: bashawk

解决方案


arr=( $(tail -1 "$file" | awk '{print $1, $2}') )
UnitID=${arr[0]}
UnitIP=${arr[1]}

or:

id=0
ip=1
unit=( $(tail -1 "$file" | awk '{print $1, $2}') )
echo "${unit[id]}"
echo "${unit[ip]}"

or:

line=$(tail -1 "$file" | awk '{print $1, $2}')
UnitID="${line% *}"
UnitIP="${line#* }"

推荐阅读