Форум русскоязычного сообщества Ubuntu


Получить помощь и пообщаться с другими пользователями Ubuntu можно
на irc канале #ubuntu-ru в сети Freenode
и в Jabber конференции ubuntu@conference.jabber.ru

Автор Тема: Как транспонировать (transpose) вывод в терминале?  (Прочитано 1160 раз)

0 Пользователей и 1 Гость просматривают эту тему.

zse

  • Автор темы
  • Гость
     — Здравствуйте все!
     — Не удаётся „малой кровью😇“ транспонировать вывод в терминале. Например такая команда:
Код: (bash) [Выделить]
find . -type f -printf "%f\n"|grep [.] |sed 's/^.*\./\./'|sort -u|paste - - - - - - - - - -|column -t
.7z   .deb     .desktop  .djvu  .doc   .document  .docx  .eml   .exe    .gif
.gz   .hidden  .htm      .html  .img   .iso       .jpg   .maff  .mhtml  .mkv
.mp3  .mp4     .ods      .odt   .ova   .pdf       .png   .rar   .run    .tar
.tga  .tiff    .TXT      .txt   .txt~  .xls       .xlsx  .xz    .zip
предназначенная для того, чтобы посмотреть что „у нас валяется где-то на складе😇“. Как видно вывод „режется“ так, что по алфавиту идут строки, а иногда хотелось бы видеть по алфавиту столбцы. Потому кажется, что нет ничего проще как это всё транспонировать!
    — Есть такая программа datamash - command-line calculations там есть возможность транспонирования. Но транспонирует эта программа только если все строки „полные“.
Код: (bash) [Выделить]
find . -type f -printf "%f\n"|grep [.] |sed 's/^.*\./\./'|sort -u|paste - - - - - - - - - -|datamash transpose|column -t
datamash: transpose input error: line 4 has 9 fields (previous lines had 10);
see --help to disable strict mode
    — Если „добавить“ к выводу данные чтобы он делился на 10 или скажем сделать (39÷13=3) 3 столбца по 13 символов или наоборот 3 строки по 13 символов, то транспонирование сработает.
Код: (bash) [Выделить]
find . -type f -printf "%f\n"|grep [.] |sed 's/^.*\./\./'|sort -u|paste - - - - - - - - - - - - -|datamash transpose|column -t
.7z        .html   .png
.deb       .img    .rar
.desktop   .iso    .run
.djvu      .jpg    .tar
.doc       .maff   .tga
.document  .mhtml  .tiff
.docx      .mkv    .TXT
.eml       .mp3    .txt
.exe       .mp4    .txt~
.gif       .ods    .xls
.gz        .odt    .xlsx
.hidden    .ova    .xz
.htm       .pdf    .zip
     — Вроде бы и не тяжело, но хотелось бы ещё легче!😇😈
     — Кро знает ещё варианты транспонирования или вообще может можно вывод „порезать“ без транспорирования?
     — Написание скрипта это решение вопроса, даже я в состоянии дня за два „изваяеть“ какое-то „поделие“, но хотелось бы как-то обойтись одной строкой
2018 Mar 25; 09:58 AM

Оффлайн Azure

  • Почётный модератор
  • Старожил
  • *
  • Сообщений: 6017
  • Windows10, i3wm on Debian9, Manjaro20.0
    • Просмотр профиля
grep [.] |sed 's/^.*\./\./'
grep -o '\.[^.]*$'
вывод „порезать“ без транспорирования?
split + paste ?

... | awk '{A[NR]=$0}END{l=int(NR/3)+1;for(i=1;i<=l;i++)print A[i],A[i+l],A[i+2*l]}' OFS='\t'
« Последнее редактирование: 25 Марта 2018, 17:49:00 от Azure »
В Линукс можно сделать ВСЁ что угодно, достаточно знать КАК !

zse

  • Автор темы
  • Гость
     — Я Вас приветствую, Azure, всё же остановился на AWK. Дело в том, что split + paste у меня получилось только с использованием промежуточных файлов в /tmp, что мне показалось не очень симпатичным.
     — C AWK у меня получалось делить „по горизонтали“ также как простой командой в paste:
Код: (bash) [Выделить]
paste - - - - - - - - - -|column -ta c AWK у меня аналогичный результат получался так:
Код: (bash) [Выделить]
…|awk 'ORS=(!(NR%8)?"\n":" ")' RS=" "|column -t     — Поскольку такие команды я создаю по схеме из советской анкеты „читаю и перевожу со словарём“😇, я для вертикальных столбцов стал сразу искать транспонирование😈… Что мне казалось легче.
     — Вашу команду я пока не разбирал для понимания, но обязательно это сделаю.
     — Ещё раз спасибо Вам Azure любопытство по этому вопросу не будет меня теперь так сильно терзать!
2018 Mar 25; 03:40 PM

Пользователь добавил сообщение 26 Марта 2018, 04:25:34:
     — И всё же вернулся к paste :), причина: в awk  получается длинная команда положим для семи столбцов😞
(Нажмите, чтобы показать/скрыть)
     — Преимущество awk в том, что команду сразу можно написать под заданное количество столбцов, а для paste количество столбцов нужно вычислить. Хотя это всё уже несущественно…
« Последнее редактирование: 26 Марта 2018, 04:25:34 от zse »

 

Страница сгенерирована за 0.049 секунд. Запросов: 23.