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, выручай

★★★★★

Ответ на: комментарий от pyatak123

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

zolden ★★★★★
() автор топика
$ 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}'
Deleted
()
Ответ на: комментарий от Deleted

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

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
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.