我有一个字符串列表(已排序的 IP 地址范围),如下所示:
10.100.0.0-10.100.255.255 External: 2.2.2.2
10.120.0.0-10.255.255.255 External: 2.2.2.2
10.0.0.0-10.255.255.255 External: 3.3.3.3
192.168.160.1-192.168.160.255 External: 3.3.3.3
and so on..
如何按每行的最后一个字符串对它们进行分组,以便结果看起来类似于:
External: 2.2.2.2
10.100.0.0-10.100.255.255
10.120.0.0-10.255.255.255
External: 3.3.3.3
10.0.0.0-10.255.255.255
192.168.160.1-192.168.160.255
注意:不需要处理 IP 地址。我们可以将它们视为字符串,因为它们已经排序和排序。我正在寻找一个纯 Bash 解决方案(不是 Python),最好没有 xargs。
提前致谢!
答案1
记住变量中的最后一个外部 ip。如果新的 ip 不同,则打印新的 ip。然后打印ip范围。
#! /bin/bash
last_ip=""
while read range _e ip ; do
if [[ $ip != "$last_ip" ]] ; then
printf '\nExternal: %s\n' "$ip"
fi
printf ' %s\n' "$range"
last_ip=$ip
done < "$1"
答案2
awk '{
if($2$3 in STORE){
##make column 2 and column 3 as key to store address.
STORE[$2$3]=STORE[$2$3]"\n""\t"$1 ##add new line here
}
else{
##if key not in STORE, add first column with a tab
STORE[$2$3]="\t"$1
}
}
##print everything using END
END{
for(add in STORE){
print add"\n"STORE[add]
}
}' file.txt