Есть ли простая команда для вывода столбцов с разделителями табуляции?

Например, у меня есть файл (созданный с помощью echo -e "var1\tvar2\t\var3\tvar4" > foo ), которые выводятся как:

 $ cat foo case elems meshing nlsys uniform 2350 0.076662 2.78 non-conformal 348 0.013332 0.55 scale 318 0.013333 0.44 smarter 504 0.016666 0.64 submodel 360 .009999 0.40 unstruct-quad 640 0.019999 0.80 unstruct-tri 1484 0.01 0.88 

Я бы предпочел выход вроде этого (здесь я использовал vim и :set tabstop=14 ):

 case elems meshing nlsys uniform 2350 0.076662 2.78 non-conformal 348 0.013332 0.55 scale 318 0.013333 0.44 smarter 504 0.016666 0.64 submodel 360 .009999 0.40 unstruct-quad 640 0.019999 0.80 unstruct-tri 1484 0.01 0.88 

Я могу получить такую ​​же функциональность с cat если я использую $ tabs=15 в bash (см. Этот вопрос ). Есть ли программа, которая делает этот вид форматирования автоматически? Я не хочу экспериментировать с значением tabs перед тем, как вставить файл.

  • Транспонировать несколько столбцов (разной длины) в строки
  • Сравнивая значение в том же столбце и направляя вывод в новый столбец
  • Как добавить имя хоста в первую строку файла
  • Подмножество содержимого файла на основе значения в столбце
  • Как файл sed может быть отформатирован так же, как печать в формате printf?
  • Как сортировать и присоединяться одновременно?
  • Добавление значений столбца с одинаковым идентификатором данных?
  • Создайте таблицу ASCII art из табличных данных
  • 4 Solutions collect form web for “Есть ли простая команда для вывода столбцов с разделителями табуляции?”

    Обычно я использую для этого программу column , она находится в пакете bsdmainutils на Debian:

     column -t foo 

    Вывод:

     case elems meshing nlsys uniform 2350 0.076662 2.78 non-conformal 348 0.013332 0.55 scale 318 0.013333 0.44 smarter 504 0.016666 0.64 submodel 360 .009999 0.40 unstruct-quad 640 0.019999 0.80 unstruct-tri 1484 0.01 0.88 

    Выдержка из column(1) в моей системе:

     ... -t Determine the number of columns the input contains and create a table. Columns are delimited with whitespace, by default, or with the characters supplied using the -s option. Useful for pretty-printing displays. ... 

    Несколько вариантов:

     var1=uniform var2=2350 var3=0.076662 var4=2.78 printf '%-15s %-10s %-12s %s\n' \ case elems messing nlsys \ "$var1" "$var2" "$var3" "$var4" printf '%s\t%s\t%s\t%s\n' \ case elems messing nlsys \ "$var1" "$var2" "$var3" "$var4" | expand -t 15,25,37 printf '%s\t%s\t%s\t%s\n' \ case elems messing nlsys \ "$var1" "$var2" "$var3" "$var4" | column -t -s $'\t' 

    column – нестандартная команда, некоторые версии / версии не поддерживают параметр -s. Он вычисляет ширину столбца на основе ввода, но это означает, что он может начать отображение только после того, как все входные данные были отправлены на него. $'...' – синтаксис ksh93, также найденный в zsh и bash.

    С zsh:

     values=( case elems messing nlsys "$var1" "$var2" "$var3" "$var4" ) print -arC4 -- "$values[@]" 

    Вы также можете использовать rs в качестве альтернативы column -t :

     (x=$(cat);rs -c -z $(wc -l<<<"$x")<<<"$x") 

    -c изменяет разделитель входных столбцов, но -c самостоятельно устанавливает разделитель входных столбцов на вкладку. -z устанавливает ширину каждого столбца в ширину самой длинной записи столбца вместо того, чтобы сделать все столбцы одинаковой ширины. Если в некоторых строках меньше столбцов, чем в первой строке, добавьте -n .

    Вопрос заключался в том, чтобы выводить столбцы с разделителями табуляции.

    Поэтому правильный ответ – небольшая адаптация ответа @nisetama. Я добавил параметр -C $ '\ t', который устанавливает форматирование вывода.

     x=$(cat foo2); rs -C$'\t' $(wc -l <<<"$x") <<<"$x" 

    Кудо к @nisetama, хотя 🙂

    Interesting Posts

    Не удается подключиться к беспроводной сети в школе

    Разница между systemd wpa_supplicant.service и wpa_supplicant@wlan0.service?

    Попытка конвертировать простую программу C в программу AWK

    Поиск основного значения тайм-аута удаленного NTP-сервера

    XZ – невозможно выделить память

    Linux для Linux USB-накопителя?

    используя sudo -u <имя> для запуска команд внутри сценариев оболочки

    Разница между ! vs !! vs * в / etc / shadow

    rsnapshot занимает много времени для резервного копирования, правильно ли написаны сценарии?

    Почему ребенок с пространством имен mount влияет на родительские установки?

    Вопрос AWK: напечатайте N строк, начиная с третьей строки после указания / pattern /

    Удаление символов в определенном столбце перед определенным символом

    Раздражающее сообщение на каждом открытии терминала в новой учетной записи пользователя

    Отключить буферизацию в конфигурации виртуальной машины

    несоответствие версии протокола (клиент 8, сервер 6) при попытке обновления

    Linux и Unix - лучшая ОС в мире.