Intereting Posts
Как узнать имя репозитория, чтобы указать с помощью `apt-get install -t`? Как я могу изменить тему XFce4 из текстовой (без GUI) консоли? Использование контурной петли для переменной окружения Динамический zsh автозаполнение для пользовательских команд Установите еще одну версию PHP. Fedora 17 Неподходящие перенаправления локальных запросов неправильным образом exim4 на debian: почему этот ACL работает при тестировании с -bh, но не в реальном использовании? Как устранить потерю связи в VM? Применение команд chmod и chown динамически к выводу команды find Проблемы с подключением после обновления до Debian Jessie Общесистемная политика управления питанием для дистрибутивов на основе debian? Как настроить .bashrc для настройки командной строки? Как я могу постоянно устанавливать разрешения на работу rw на ubuntu 16.04? Различное использование grep Как получить помощь для переменных bash из командной строки?

Обертывание длинных ячеек в ЦС, чтобы держать их в одной колонке

Форматирование TSV с длинными ячейками со column делает его читаемость очень низкой. Он просто разбивает строки следующим образом:

 $ python3 -c 'for i in (1,2,3): print(((str(i)*50)+"\t")*3)' | column -s $'\t' -t 11111111111111111111111111111111111111111111111111 11111111111111111111111111111111111111111111111111 1111111111111111111 1111111111111111111111111111111 22222222222222222222222222222222222222222222222222 22222222222222222222222222222222222222222222222222 2222222222222222222 2222222222222222222222222222222 33333333333333333333333333333333333333333333333333 33333333333333333333333333333333333333333333333333 3333333333333333333 3333333333333333333333333333333 

Мой вопрос заключается в том, как мне форматировать файлы tsv (скорее всего, csv), чтобы убедиться, что при достижении максимальной длины ячейки (которая может быть задана с помощью параметра) это не просто разрыв строки, но данные начнутся в новой строке с тем же отступом.

Для вышеприведенных данных результатом может быть что-то вроде:

 1111111111 1111111111 1111111111 1111111111 1111111111 1111111111 1111111111 1111111111 1111111111 1111111111 1111111111 1111111111 1111111111 1111111111 1111111111 2222222222 2222222222 2222222222 2222222222 2222222222 2222222222 2222222222 2222222222 2222222222 2222222222 2222222222 2222222222 2222222222 2222222222 2222222222 3333333333 3333333333 3333333333 3333333333 3333333333 3333333333 3333333333 3333333333 3333333333 3333333333 3333333333 3333333333 3333333333 3333333333 3333333333 

    Я не знаю, понимаете, чего хотите достичь, но, возможно, эта программа awk полезна для вас:

    Содержимое script.awk :

     { ## Number of blocks printed to output. block = 0 ## Get number of columns searching how many tabs exists in the line. ## I substract one because each line has a tab at the end and splits ## function count blank space after it like a new column. col_nums = split( $0, dummy, /\t+/ ) --col_nums ## Incorrect line if it has not any tab. Omit it. if ( col_nums < 1 ) { next } ## Get number of chars of each block to output. ## 'max_cell_length' is an input argument provided by the user. It means ## number of chars to input by line. chars = max_cell_length / col_nums ## For each column... for ( i = 1; i <= NF; i++ ) { ## This is the index where I begin to extract a substring. Zero is ## at first char. begin_idx = 0 ## Get for each column blocks of 'chars' characters. And repeat until ## end of column. while ( begin_idx < length( $i ) ) { column = substr( $i, begin_idx, chars ) ## Increment index to extract next block where last one ended. begin_idx += chars ## Print block to output. printf "%s ", column ## When have been printed number of columns indicated by the ## user, change to next line. if ( ++block % col_nums == 0 ) { printf "\n" } } } } { ## For each line, print an extra newline for a pretty output. printf "\n" } 

    Запуск скрипта:

     python3 -c 'for i in (1,2,3): print(((str(i)*50)+"\t")*3)' | awk -v max_cell_length=30 -f script.awk - 

    И результат:

     1111111111 1111111111 1111111111 1111111111 1111111111 1111111111 1111111111 1111111111 1111111111 1111111111 1111111111 1111111111 1111111111 1111111111 1111111111 2222222222 2222222222 2222222222 2222222222 2222222222 2222222222 2222222222 2222222222 2222222222 2222222222 2222222222 2222222222 2222222222 2222222222 2222222222 3333333333 3333333333 3333333333 3333333333 3333333333 3333333333 3333333333 3333333333 3333333333 3333333333 3333333333 3333333333 3333333333 3333333333 3333333333 

    Вы можете использовать переменную max_cell_length чтобы указать количество символов в строке вывода (без банков), и я полагаю, что это будет коэффициент количества символов в исходных данных. В противном случае вывод будет плохо сформирован, я проверил его с 30 , как вы можете видеть в этом сообщении, и с 50 . Оба кажутся правильными, но не со многими другими странными цифрами.