以下是 Windows DHCP 租用文件的摘录:
10.11.1.3 Infinite DHCP 5c497d1ee201 xxxx yyyyy
10.11.1.4 PC-name Infinite DHCP 0002025e611e xxxx yyyyy
我想获得可变的 IP 和 MAC。所以这是我解析每一行的方式:
IFS=$'\t' read -r -a array <<< "$line"
ip=${array[0]}
mac=${array[3]}
问题是第一行没有名字,所以我在IP和infinite之间有两个连续的标签。所以使用这段代码,第一行被正确解析,但在第二行,我在变量 mac 中得到“DHCP”。
我该如何纠正? 谢谢
答案 0 :(得分:1)
您可以使用带有制表符的 awk
作为输入字段分隔符:
awk -F '\t' '{print $1, $5}' file
10.11.1.3 5c497d1ee201
10.11.1.4 0002025e611e
答案 1 :(得分:1)
我会改用 readarray
。
$ line=$'10.11.1.3\t\tInfinite\tDHCP\t5c497d1ee201\txxxx\tyyyyy'
$ readarray -d $'\t' -t array <<< "$line"
$ declare -p array
declare -a array=([0]="10.11.1.3" [1]="" [2]="Infinite" [3]="DHCP" [4]="5c497d1ee201" [5]="xxxx" [6]=$'yyyyy\n')
如果尾随换行有问题,要么手动修剪它,要么附加一个制表符来输入并限制它。
$ readarray -d $'\t' -t -n 7 array <<< "$line"$'\t'
$ declare -p array
declare -a array=([0]="10.11.1.3" [1]="" [2]="Infinite" [3]="DHCP" [4]="5c497d1ee201" [5]="xxxx" [6]="yyyyy")