Поиск по сайту:

Различные способы использования команды столбца в Linux


Вам когда-нибудь приходилось работать с файлами CSV и создавать выходные данные в структурированном табличном формате? Недавно я работал над очисткой данных в файле, который не имеет правильной структуры. Между каждым столбцом так много пробелов, что мне приходится конвертировать его в формат CSV, чтобы отправить в базу данных. После очистки и создания выходных данных в формате CSV мой вывод не выглядит визуально привлекательным для проверки целостности данных в файле CSV. Вот тут-то мне и пригодится команда «Колонка».

Согласно man-странице, команда column «столбцы». Проще говоря, столбец — это простая утилита, которая может форматировать выходные данные в формат столбца (строки и поля) на основе структуры исходного файла. Команда column является частью пакета util-linux.

Здесь важно отметить: команда column ведет себя по-разному в дистрибутивах на основе Debian и Rhel. Причина в том, что дистрибутив на основе Debian использует «column» из bsdmainutils вместо util-linux. Исходная версия команды column более новая, чем пакет bsdmainutils. Взгляните на отчет об ошибке, чтобы узнать больше об этом.

dpkg -S $(which column)

В демонстрационных целях я использую CentOS 7 и покажу различные варианты между Ubuntu и CentOS 7. Чтобы проверить версию столбца, выполните следующую команду. Эта команда также покажет версию пакета util-linux.

column --version  # will not work in Debian/ubuntu

Вы также можете проверить версию util-linux, выполнив приведенные ниже команды.

rpm -qa | grep -i util-linux   # Redhat,Centos,Fedora,Amazon Linux
dpkg -l | grep -i util-linux    # Ubuntu

Прежде чем использовать команду column, лучше всего начать со страницы руководства и изучить ее параметры.

man column

Список содержимого файла в табличном формате

Команда column может создать таблицу, передав имя файла в качестве аргумента вместе с флагом -t. Я использую /etc/passwd в качестве входного файла.

column -t /etc/passwd

Глядя на изображение выше, вы можете подумать, что это не то, что мы ожидали, и результат может выглядеть странно. Да! Ты прав. Столбцы рассматривают пробел как разделитель по умолчанию при создании таблицы. Это поведение можно переопределить, передав собственный разделитель.

Пользовательский разделитель

Пользовательские разделители предоставляют вам широкий спектр возможностей для работы. Чтобы создать собственный разделитель, используйте флаг -s, за которым следует разделитель. Теперь мы будем использовать “: ” в качестве разделителя для разделения файла /etc/passwd.

column -s ":"  -t /etc/passwd

Посмотрите на изображение выше, где таблица красиво отформатирована и структурирована. В util-linux версии 2.23 опция -s была изменена, чтобы не быть жадной.

Теперь запустите ту же команду в Ubuntu, и результат будет жадным. Это связано с тем, что команда column (bsdmainutils) в Ubuntu будет рассматривать несколько соседних слов как одно слово.

column -s ":"  -t /etc/passwd

Чтобы преодолеть это поведение, используйте флаг -n.

column -t -s ":" -n /etc/passwd             # Only on Debian/Ubuntu

Игнорировать белые пустые строки в выводе файла

Если во входном файле есть пустые строки, команда столбца по умолчанию игнорирует их. Посмотрите мой входной файл в формате CSV, и я добавил пустую строку между каждой строкой. Теперь давайте создадим таблицу, как мы делали это раньше с этим входным файлом.

column -t -s ";" dummy.txt

На изображении выше вы можете видеть, что мой входной файл dummy.txt содержит пустые строки, и когда я пытаюсь создать таблицу, пустые строки игнорируются.

Примечание. Это поведение по умолчанию для обоих вариантов «bsdmainutils/util-linux» команды column. Но column (bsdmainutils) имеет возможность переопределить это поведение, передав флаг -e.

column -e -t -s "," dummy.txt        # Only on Debian/Ubuntu

На изображении выше видно, что таблица отформатирована правильно и пустые строки не игнорируются.

Разделитель вывода файлов

По умолчанию в качестве выходных разделителей будут использоваться два пробела. Это поведение можно переопределить, передав флаг -o. У вас не будет опции разделителя вывода в столбце (bsdmainutils).

column -t -s "," -o "||" dummy.txt	# Only on Rhel based distro

Преобразование строк файла в столбцы

Используя флаг -x, вы можете преобразовать строки в столбцы. Такое поведение одинаково в вариантах rhel и ubuntu команды столбца. Это очень полезная функция, когда вам нужно получить определенное поле с помощью команды awk или столбца, а затем преобразовать его в заголовок вашего CSV-файла.

column -x fillcols.txt

Когда вы запускаете команду column без использования каких-либо флагов, поведение будет таким же, как при передаче флага -x.

Найти размер столбца

В столбце используется переменная среды ($COLUMNS), чтобы узнать размер вашего терминала, и в зависимости от размера используйте команду echo, размер таблицы будет отображаться в терминале. .

echo $COLUMNS

Посмотрите на изображение ниже. Первоначально я изменил размер своего терминала, чтобы для $COLUMNS был установлен размер 60, и выполнил команду столбца. Я снова изменил размер своего терминала, чтобы для $COLUMNS был установлен размер 114, и снова запустил команду столбца. Вы можете увидеть разницу в том, как столбец печатает таблицу, когда мы изменяем размер терминала.

column -t -s ":" /etc/passwd | head 5

Вот и все, что касается этой статьи. Если у вас есть какие-либо отзывы, пожалуйста, оставьте их в разделе комментариев.