Расположение столбца рядом с последним N-м экземпляром разделителя

У меня есть следующие данные в моем файле

alice bob cathy david elon
unix linux bsd

Я хочу вывести данные с только последним N-м экземпляром разделителя (т.е. пробелом).

Как для последнего экземпляра разделителя (пробел)

alice bob cathy david     elon
unix linux                bsd

или для второго последнего экземпляра разделителя (пробел)

alice bob cathy     david elon
unix                linux bsd
0
20.07.2017, 14:40
1 ответ

Когда ваши данные ограничены::

perl -F'[:]' -lane '
   push @e, join $", splice @F, -1;
   push @A, join $", @F;
   length($A[-1]) > $maxW and $maxW = length($A[-1])}{
   print $_, $" x ($maxW - length), "\t", shift @e for @A;
' file

Результаты

alice bob cathy david   elon
unix linux              bsd

если вы хотите, чтобы последние 2 элемента были разделены, измените -1в списке аргументов spliceна -2, в результате чего:


alice bob cathy david elon
unix            linux bsd

Пояснение

  • Сохраните массив @e, который содержит последние -N-е элементы для каждой строки.
  • Поддерживать массив @A, который содержит каждую h строку после того, как последние -N элементов были удалены из текущей строки.
  • Определяем максимальную ширину этих обрезанных линий.
  • После того, как все строки прочитаны, мы печатаем каждую усеченную строку + дифференциальные пробелы таким образом, что усеченные -длины строк выравниваются (после пробелов справа )+ TAB + последние -N элементов.
1
28.01.2020, 02:45

Теги

Похожие вопросы