2013-02-21 53 views
0

我想用bash腳本重新排列一些行。在bash腳本中重新排列/分組具有相同參數的行

輸入:

Name1 127.0.0.1 
Name2 127.0.0.2 
Name2 127.0.0.5 
Name2 127.0.0.8 
Name3 127.0.0.3 

輸出:

Name1 127.0.0.1 
Name2 127.0.0.2, 127.0.0.5, 127.0.0.8 
Name3 127.0.0.3 

有沒有一種明智的方式 'sed的' 等 '的awk' 或做到這一點?謝謝!

+0

調用,那將是很容易寫的[標籤:AWK]一個程序來做到這一點。如果你不熟悉'awk',用你最舒服的語言來編寫它。 – Johnsyweb 2013-02-21 08:12:43

+1

例如:cat test_data | awk'{arr [$ 1] = arr [$ 1]?arr [$ 1]「,」$ 2:$ 2} END {for(var in arr)print var「」arr [var]}' – XzKto 2013-02-21 09:25:09

+0

@XzKto:太棒了!正是我在找什麼。非常感謝! – user1613270 2013-02-21 09:37:26

回答

1

這一個適用於bash。它通過適當的名稱

declare -A ips 

while read name ip; do 
    if [ -n "${ips[$name]}" ]; then 
     ips[$name]="${ips[$name]}, $ip" 
    else 
     ips[$name]="$ip" 
    fi 
done 

for i in "${!ips[@]}"; do 
    echo "$i ${ips[$i]}" 
done 

拿起所有的IP地址,並將它們分組,您可以用

bash script.sh <input.txt 
+0

感謝分享,這也是我也做過的程序化方式。我只是喜歡從上面的XzKto解決方案 - 一個優雅的單線;-) – user1613270 2013-02-21 09:38:44