Command-Line
按每行的最後一個字元串分組列表
我有一個字元串列表(排序的 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。
提前致謝!
記住變數中的最後一個外部 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"
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