LINUX.ORG.RU

Манипуляция (перестановка) строк

 ,


0

3

Привет лор, посоветуй мне опять манипуляторов
Хочу уметь красиво форматировать консольный вывод

Входные данные:

vlan 123
master 1.1.1.1
slave 2.2.2.1
vlan 345
master 1.1.1.2
slave 2.2.2.2

Желаемый результат:
vlan 123 345
master 1.1.1.1 1.1.1.2
slave 2.2.2.1 2.2.2.2

emulek, выручай

★★★★★

    { a[$1] = a[$1] " " $2 }
END { for(v in a) { print v, a[v] } }
yoghurt ★★★★★ ()
Последнее исправление: yoghurt (всего исправлений: 1)
Ответ на: комментарий от yoghurt

ой какая красота получилась, ты бы видел, благодарствую

zolden ★★★★★ ()
Ответ на: комментарий от pyatak123

ога, неплохо
только строчка c vlan оказывается в низу, но это несущественная косметика

zolden ★★★★★ ()
Ответ на: комментарий от pyatak123

Добавь во входной файл ещё одну запись, например «master 3.3.3.3», и всё поломается

yoghurt ★★★★★ ()
$ sed -r ':a;N;s/((\n|^)([^ ]+ ))([^\n]*)(.*)\3([^\n]*)$/\1\4 \6\5/;s/\n*$//;ba' << END
> vlan 123
> master 1.1.1.1
> slave 2.2.2.1
> vlan 345
> master 1.1.1.2
> slave 2.2.2.2
> END
vlan 123 345
master 1.1.1.1 1.1.1.2
slave 2.2.2.1 2.2.2.2
anarquista ★★★★★ ()
Последнее исправление: anarquista (всего исправлений: 1)
Ответ на: комментарий от yoghurt

Спс. Я знаю. Да я просто на шару , недавно похожее ваял прост.

pyatak123 ()
perl -anE '$H{$F[0]}.=" $F[1]" if @F}{say@_ while @_=each %H}'
chinarulezz ★★★★★ ()
Ответ на: комментарий от chinarulezz

При наличии пустой строки во входном файле выведется, да

yoghurt ★★★★★ ()

while read key val; do
   case $key in
      vlan)
         vlan="$vlan $val"
      ;;
      master)
         master="$master $val"
      ;;
      slave)
         slave="$slave $val"
      ;;
   esac

  # вместо case можно eval
  # eval "$key=\$$key $val"
done

echo "vlan:   $vlan"
echo "master: $master"
echo "slave:  $slave"

anonymous ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.