aaa=(`cat tracert.txt | grep -v '^[a-z]' | grep -v '*' | sed 's/(//g' | sed 's/)//g' | awk '{print ""$3" "$8""}'`)
cnt=${#aaa[@]}
for ((i=0;i<cnt-2;i++)); do
if [ $i -eq $((i/2*2)) ]; then
echo "\"${aaa[i]}\" -> \"${aaa[i+2]}\" [ label = \"${aaa[i+3]}\" ]"
fi
done
5 пайпов и bash, легко меняются на 1 awk
Следующий код, сохраняем в файл
tm.awkBEGIN { n=1;}
!/^[a-z]|\*/ { if (length($0)>1) {gsub(/[\)\(]/,"") ; ip[n]=$3; ms[n]=$8; n++} }
END { for (x=1;x<n-1;x++) print "\"" ip[x] "\" -> \"" ip[x+1] "\" [ label = \"" ms[x+1] "\" ]"}
и запускаем -
awk -f tm.awk tracert.txtМожно обойтись без .awk файла и влепить всё в коммандную строку. Но мне так больше нравится
Проверяем скорость работы -
1. Ваш скрипт
time for i in `seq 1 1000` ; do ./t.sh >/dev/null ; done
real 0m25.076s
user 0m10.165s
sys 0m7.340s
2. Мой скрипт
time for i in `seq 1 1000` ; do awk -f tm.awk tracert.txt >/dev/null ; done
real 0m3.556s
user 0m0.112s
sys 0m0.464s
Итого: awk сработал примерно в 7 раз быстрее ...
Простые задачи, просто решаются с awk, и быстро работают.
Советую почитать
GNU Awk User's Guide жить станет легче и веселей
Если задача посложнее, тогда можно думать о perl,python или php и.т.д.
Часто, сама задача подскзывает, на каком языке лучше её решать
Интересный факт, обычно комманды Unix несут смысловую нагрузку и расшифровывают её назначение.
Фактически единственное исключение это AWK, от фамилий разработчиков (Aho, Weinberg, Kernigan)