Linux вывести только колонку

Вывод нужных столбцов в консоле

Ребят подскажите, не могу сделать простое действие. Есть команда вывода всех контейнеров docker ps -a, но все колонки мне не нужны, да они и не умещаются на экран. А вот как вывести только нужные колонки? Вроде есть команды cut и awk. Но нижние колонки ломаются. К примеру docker ps -a | awk <‘print $6,$7,$8’>выводит нужные колонки, но внизу вся информация ломается, выводится какая то ахинея. Может кто подскажет?

Для справки по кейвордам читай ps(1).

Интересно было бы понять сам механизм, как можно выделить из большой таблицы только нужные столбцы. Это может в куча мест пригодиться. А вывод docker контейнеров это пример, на котором я тренируюсь. По сути awk <‘print $6,$7,$8’>работает, но только для первой строки. Остальные строки как то перемешиваются. И там выводится абы что.

Ещё раз повторяю: вывод ps не является таблицей! Это обычные строки.

По сути awk <‘print $6,$7,$8’>работает, но только для первой строки. Остальные строки как то перемешиваются.

Из-за разного количества слов в строке, из-за отсутствия форматирования (для awk любое количество пробелов, если не указано иного опцией -F , является разделителем ввода, вывод значений, разделённых запятой, разделяется одним пробелом).

Если в твоей ОС ps умеет в libxo, ты можешь формировать вывод в json и парсить его чем-нибудь типа jq (или библиотекой на любом удобном для тебя скриптовом языке вроде Python).

Вообще, не понятна задача.

Остальные строки как то перемешиваются. И там выводится абы что.

Ты хочешь вывести красиво нужные тебе столбцы в терминал? Если да, то ещё раз почитай man ps , в частности про опцию -o и её аргументы.

Если ты хочешь заскриптовать, то в первую очередь смотри в сторону libxo, если нет, то поиграйся с последовательностью выводимых данных, чтобы вывод не колбасило.

Большое спасибо за развёрнутый ответ! Теперь всё стало гораздо понятнее. Это то что нужно.

Подправить форматированную пробелами таблицу можно так:

Источник

Отображение содержимого файла в формате столбца в Linux

Команда Linux Column работает с текстовыми файлами с разделителями

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

В этот список входят 10 лучших команд, их названия, количество игр, в которых они играли, и набранные очки.

Существует ряд команд Linux, которые вы можете использовать для отображения данных в командной строке. Например, команда cat отображает файл в точности так, как он отображается в файле. Команда tail может использоваться для показа части файла или всего файла, как и команда head . Однако ни одна из этих команд не отображает вывод таким образом, чтобы он выглядел хорошо.

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

Основное использование команды Column

Вы можете запустить команду столбца без каких-либо параметров следующим образом:

Это лучше всего работает с файлами слов с пробелами между словами. это не работает так же хорошо с табличными данными, как в этом примере таблицы лиги.

pos | team | pld | pts 2 | tottenham | 31 | 61 4 | man city | 30 | 51 6 | man utd | 30 | 50 8 | Сток Сити | 31 | 46 10 | Челси | 30 | 41 1 | Лестер | 31 | 66 3 | Арсенал | 30 | 55 5 | Вест Хэм | 30 | 50 7 | Саутгемптон | 31 | 47 9 | Ливерпуль | 29 | 44

Указание ширины столбца

Если вы знаете ширину столбцов, вы можете использовать следующую команду для разделения столбцов по ширине:

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

В случае таблицы лиги это не работает хорошо, если все столбцы определенной ширины. Чтобы доказать это, измените файл таблицы лиги следующим образом:

Теперь с помощью следующей команды вы можете получить приличный вывод:

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

Указание разделителей с помощью команды Column

Лучший способ использовать команду столбца для файлов с запятой, канала или других файлов с разделителями заключается в следующем:

Ключ -s позволяет определить используемый разделитель. Например, если ваш файл разделен запятыми, вы можете поставить “,” после -s. Ключ -t отображает данные в табличном формате.

Выходные разделители

До сих пор этот пример показал, как работать с разделителем входного файла, но как быть с данными, когда они отображаются на экране.

По умолчанию в Linux используется два пробела, но, возможно, вы захотите использовать вместо них два двоеточия. Следующая команда показывает, как указать разделитель вывода:

При использовании с файлом таблицы лиги команда выдает следующий вывод:

Заполнить строки перед столбцами

Есть еще один переключатель, который не особенно полезен, но включен сюда для полноты картины. Ключ -x при использовании с ключом -c заполняет строки перед столбцами.

Так что это значит? Посмотрите на следующий пример:

Вывод этого будет следующим:

pos | team | pld | pts 3 | arsenal | 30 | 55 6 | man utd | 30 | 50 9 | Ливерпуль | 29 | 44 1 | leicester | 31 | 66 4 | man city | 30 | 51 7 | Саутгемптон | 31 | 47 10 | Челси | 30 | 41 2 | Тоттенхэм | 31 | 61 5 | Вест Хэм | 30 | 50 8 | Сток Сити | 31 | 46

Как вы можете видеть, сначала идет вниз, а затем поперек.

Теперь посмотрим на этот пример:

На этот раз вывод выглядит следующим образом:

pos | team | pld | pts 1 | leicester | 31 | 66 2 | tottenham | 31 | 61 3 | арсенал | 30 | 55 4 | man city | 30 | 51 5 | west ham | 30 | 50 6 | man Юнайтед | 30 | 50 7 | Саутгемптон | 31 | 47 8 | Сток Сити | 31 | 46 9 | Ливерпуль | 29 | 44 10 | Челси | 30 | 41

Данные идут по экрану, а затем вниз.

Другие переключатели

Доступны только другие переключатели:

Здесь отображается версия колонки, установленной на вашем компьютере.

Это отображает страницу руководства к окну терминала.

Источник

» Статьи » AWK вывод столбцов из файла в Linux

AWK вывод столбцов из файла в Linux

Статьи

AWK — это удобный и функциональный инструмент Linux, который можно использовать для обработки входных данных в виде столбцов.

С помощью примеров из данной статьи, Вы сможете решать такие распространенные задачи, как :

  • Печать Столбцов по Номерам
  • Изменять Разделители Колонок
  • Исключать Определенные Столбцы
  • Печатать или Исключать Диапазон Столбцов

Печать Столбцов по Номерам с помощью AWK

Вывести все столбцы.

Напечатать 3-ий столбец.

Напечатать 1-ый и 3-ий столбцы.

Изменить Разделитель Колонок в AWK

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

Использовать «,» (запятую) в качестве разделителя и вывести 2-ую колонку.

Использовать «:» (двоеточие) в качестве разделителя и напечатать 3-ий столбец.

Исключить Определенные Столбцы с помощью AWK

Напечатать все столбцы, за исключением 3-его.

Напечатать все столбцы, за исключением 1-ого и 2-ого.

Напечатать или Исключить Диапазон Столбцов с помощью AWK

Вывести колоноки со 2-ой по 4-ую.

Исключить диапазон столбцов со 2-ого по 4-ый и напечатать все остальные.

Источник

bash: разделить вывод команды по столбцам

Я хочу сделать это:

  1. выполнить команду
  2. снять выход
  3. выберите строку
  4. выберите столбец этой строки

в качестве примера предположим, что я хочу получить имя команды из $PID (обратите внимание, что это всего лишь пример, я не предполагаю, что это самый простой способ получить имя команды из идентификатора процесса — моя реальная проблема с другой командой, формат вывода которой я не могу контроль.)

если я запускаю ps Я:

теперь я делаю ps | egrep 11383 и вам

следующий шаг: ps | egrep 11383 | cut -d» » -f 4 . Выход есть:

проблема в том, что cut отрезает выход одиночными пробелами, и как ps добавляет некоторые пробелы между 2-м и 3-м столбцами, чтобы сохранить некоторое сходство таблицы, cut выбирает пустую строку. Конечно, я мог бы использовать cut чтобы выбрать 7-е, а не 4-е поле, но как я могу знать, особенно, когда выход является переменным и неизвестным заранее.

10 ответов

один простой способ-добавить проход tr чтобы выдавить любые повторяющиеся разделители полей:

Я думаю, что самый простой способ-использовать awk. Пример:

обратите внимание: tr -s ‘ ‘ опция не удалит ни одного ведущего пробела. Если ваш столбец выровнен по правому краю (как в ps pid).

тогда вырезание приведет к пустой строке для некоторых из этих полей, если это первый столбец:

если вы не предшествуете ему с пробелом, очевидно

теперь, для этого конкретного случая чисел pid (не имен), есть функция, называемая pgrep :

функции оболочки

однако, в общем, на самом деле все еще можно использовать функции оболочки в краткой форме, потому что есть аккуратная вещь о :

первый параметр для чтения, a , выбирает первый столбец, и если есть больше,все остальное будет поставлен в b . В результате вам никогда не нужно больше переменных, чем количество ваших колонка +1.

затем выведет 3-й столбец. Как указано в моем комментарии.

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

Решение Массиве

таким образом, мы получаем ответ от @frayser, который должен использовать переменную оболочки IFS, которая по умолчанию имеет пробел, чтобы разделить строку на массив. Это только работает в Баш. Дэш и Эш не поддерживают его. Мне было очень сложно разбить строку на компоненты в Busybox. Достаточно легко получить один компонент (например, с помощью awk), а затем повторить это для каждого нужного вам параметра. Но затем вы снова и снова вызываете awk в одной строке или повторно используете блок чтения с echo в одной строке. Что не эффективно и не красиво. Таким образом, вы в конечном итоге разделяете с помощью $ и так далее. Заставляет вас тосковать по Питону навыки, потому что на самом деле оболочки сценариев не очень весело больше, если половина или более функций, к которым вы привыкли, ушли. Но вы можете предположить, что даже python не будет установлен в такой системе, и это не так ;-).

Источник

Как отобразить только 1 столбец вывода команды ls?

Скажем, когда я выполняю команду ls, результат будет:

Можно ли отобразить только определенный столбец вывода, в данном случае file2? Я пробовал следующее безуспешно:

По сути, все, что я хочу сделать, это отобразить только второй столбец, в этом случае я хочу повторить:

Следующая команда отформатирует вывод ls в один столбец

Однако, если вы попытаетесь использовать это имя файла позже, не делайте этого, так как оно будет разбито на имена файлов, содержащие пробелы. Вместо этого поместите файлы в массив и получите второй, который вообще не требует анализа:

Порядок, в котором вы возвращаете файлы, зависит от значения LC_COLLATE . Таким образом, вы можете установить LC_COLLATE=C сначала, если вы хотите «стандартную» сортировку во всех угловых случаях.

Вы должны добавить, -C как ls использует режим с одним столбцом, когда вывод не является терминалом. awk затем печатает второй столбец:

Я думаю, что вы ищете

Он не будет отображать права доступа, владельца, группу, дату, размер . а просто имя файла в одном столбце.

Единственный способ, который работает для меня — это добавить «-все». Это:

Потому что -all добавить больше столбцов, таких как пользователь, разрешения и т. Д.

Как уже было упомянуто — использование столбцов для анализа ls вывода не очень надежно, потому что ls разбивает строки в соответствии с длиной имени вашего файла и шириной терминала. Хотя часто интересно отображать один столбец списка элементов. Вы можете сделать это используя команду cut:

Обратите внимание, что -d позволяет выбрать разделитель столбцов, например, с помощью

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

Предположим, если вы хотите отобразить только определенное имя файла в текущем пути, используйте команду ниже

Это сложно, потому что разбор ls -C зависит от:

  1. длина имени файла (которая сама зависит от указанного списка файлов, переданного в ls -C )
  2. ширина терминала
  3. тот факт, что ls -C выходные данные являются столбцовыми, но могут быть настроены на различное количество пробелов в качестве разделителей полей.
  4. возможность пробелов в именах файлов (отображение которых зависит от ls выбранных параметров отображения).

А сейчас давайте начнем с более простой проблемы ( т.е. не с № 4 выше), предполагая, что в именах файлов нет пробелов . Чтобы напечатать столбец № 2, это работает:

COLUMNS=$COLUMNS гарантирует, что заданная длина столбца будет | соответствовать текущему отображению терминала. Изменение этого значения на произвольное значение тоже работает, поэтому COLUMNS=50 или COLUMNS=70 может привести ls -C к перестановке вещей в соответствии с этой шириной.

Другим методом будет использование -w переключателя, например :

tr делает разделители полей непротиворечивыми: одна вкладка между каждым столбцом.

Источник

Читайте также:  Утилиты асус для windows 10
Оцените статью