Это типа ленивым не лениво лишний шел поспавнить? =)))
Re: [bash] Взять четвертый столбец из вывода
>ps ax | cut -f 4 -d ‘ ‘
не, так фигово. вот так — получше:
ps ax | tr -s ‘ ‘ | cut -f 4 -d ‘ ‘
Re: [bash] Взять четвертый столбец из вывода
Если у вас bash, то можно без grep и awk, допустим:
PEREMENNAY=`ps -e | while read A B C D ; do [ $A -lt 100 ] && echo $D ; done 2>/dev/null`
Если использовать awk, то можно обойтись без grep:
Источник
» Статьи » AWK вывод столбцов из файла в Linux
AWK вывод столбцов из файла в Linux
Статьи
AWK — это удобный и функциональный инструмент Linux, который можно использовать для обработки входных данных в виде столбцов.
С помощью примеров из данной статьи, Вы сможете решать такие распространенные задачи, как :
Печать Столбцов по Номерам
Изменять Разделители Колонок
Исключать Определенные Столбцы
Печатать или Исключать Диапазон Столбцов
Печать Столбцов по Номерам с помощью AWK
Вывести все столбцы.
Напечатать 3-ий столбец.
Напечатать 1-ый и 3-ий столбцы.
Изменить Разделитель Колонок в AWK
По умолчанию в качестве символа разделителя колонок используется пробел и табуляция.
Использовать «,» (запятую) в качестве разделителя и вывести 2-ую колонку.
Использовать «:» (двоеточие) в качестве разделителя и напечатать 3-ий столбец.
Исключить Определенные Столбцы с помощью AWK
Напечатать все столбцы, за исключением 3-его.
Напечатать все столбцы, за исключением 1-ого и 2-ого.
Напечатать или Исключить Диапазон Столбцов с помощью AWK
Вывести колоноки со 2-ой по 4-ую.
Исключить диапазон столбцов со 2-ого по 4-ый и напечатать все остальные.
Источник
Вывод нужных столбцов в консоле
Ребят подскажите, не могу сделать простое действие. Есть команда вывода всех контейнеров 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, если нет, то поиграйся с последовательностью выводимых данных, чтобы вывод не колбасило.
Большое спасибо за развёрнутый ответ! Теперь всё стало гораздо понятнее. Это то что нужно.
Подправить форматированную пробелами таблицу можно так:
Источник
Как отобразить только 1 столбец вывода команды ls?
Скажем, когда я выполняю команду ls, результат будет:
Можно ли отобразить только определенный столбец вывода, в данном случае file2? Я пробовал следующее безуспешно:
По сути, все, что я хочу сделать, это отобразить только второй столбец, в этом случае я хочу повторить:
Следующая команда отформатирует вывод ls в один столбец
Однако, если вы попытаетесь использовать это имя файла позже, не делайте этого, так как оно будет разбито на имена файлов, содержащие пробелы. Вместо этого поместите файлы в массив и получите второй, который вообще не требует анализа:
Порядок, в котором вы возвращаете файлы, зависит от значения LC_COLLATE . Таким образом, вы можете установить LC_COLLATE=C сначала, если вы хотите «стандартную» сортировку во всех угловых случаях.
Вы должны добавить, -C как ls использует режим с одним столбцом, когда вывод не является терминалом. awk затем печатает второй столбец:
Я думаю, что вы ищете
Он не будет отображать права доступа, владельца, группу, дату, размер . а просто имя файла в одном столбце.
Единственный способ, который работает для меня — это добавить «-все». Это:
Потому что -all добавить больше столбцов, таких как пользователь, разрешения и т. Д.
Как уже было упомянуто — использование столбцов для анализа ls вывода не очень надежно, потому что ls разбивает строки в соответствии с длиной имени вашего файла и шириной терминала. Хотя часто интересно отображать один столбец списка элементов. Вы можете сделать это используя команду cut:
Обратите внимание, что -d позволяет выбрать разделитель столбцов, например, с помощью
Вы можете отобразить второй столбец списка через запятую.
Предположим, если вы хотите отобразить только определенное имя файла в текущем пути, используйте команду ниже
Это сложно, потому что разбор ls -C зависит от:
длина имени файла (которая сама зависит от указанного списка файлов, переданного в ls -C )
ширина терминала
тот факт, что ls -C выходные данные являются столбцовыми, но могут быть настроены на различное количество пробелов в качестве разделителей полей.
возможность пробелов в именах файлов (отображение которых зависит от ls выбранных параметров отображения).
А сейчас давайте начнем с более простой проблемы ( т.е. не с № 4 выше), предполагая, что в именах файлов нет пробелов . Чтобы напечатать столбец № 2, это работает:
COLUMNS=$COLUMNS гарантирует, что заданная длина столбца будет | соответствовать текущему отображению терминала. Изменение этого значения на произвольное значение тоже работает, поэтому COLUMNS=50 или COLUMNS=70 может привести ls -C к перестановке вещей в соответствии с этой шириной.
Другим методом будет использование -w переключателя, например :
tr делает разделители полей непротиворечивыми: одна вкладка между каждым столбцом.
Источник
Хитрости командной строки linux. Часть 5
Использование Операторов «Grep ИЛИ / Grep И / Grep НЕ» в BASH
Оператор Grep ‘OR’
Находим все строки в файле, которые содержат какие-либо из перечисленных шаблонов.
Используя команду GREP :
Используя команду AWK :
Используя команду SED :
Оператор Grep ‘AND’
Находим и печатаем строки содержащие все перечисленные паттерны.
Используя команду GREP :
Используя команду AWK :
Используя команду SED :
Оператор Grep ‘NOT’
Находим и печатаем строки, которые не содержат указанный паттерн.
Используя команду GREP :
Используя команду AWK :
Используя команду SED :
Печать Столбцов (Колонок) в Bash с помощью AWK
AWK — это мощный инструмент командной строки, который можно использовать для обработки входных данных в виде столбцов.
С помощью примеров из данной статьи, Вы сможете решать такие распространенные задачи, как :
Печать Столбцов по Номерам
Изменять Разделители Колонок
Исключать Определенные Столбцы
Печатать или Исключать Диапазон Столбцов
Печать Столбцов по Номерам с помощью AWK
Вывести все столбцы.
Напечатать 3-ий столбец.
Напечатать 1-ый и 3-ий столбцы.
Изменить Разделитель Колонок в AWK
По умолчанию AWK, в качестве разделителя колонок, использует пробелы и табуляции.
Использовать «,» (запятую) в качестве разделителя и вывести 2-ую колонку.
Использовать «:» (двоеточие) в качестве разделителя и напечатать 3-ий столбец.
Исключить Определенные Столбцы с помощью AWK
Напечатать все столбцы, за исключением 3-его.
Напечатать все столбцы, за исключением 1-ого и 2-ого.
Напечатать или Исключить Диапазон Столбцов с помощью AWK
Вывести колоноки со 2-ой по 4-ую.
Исключить диапазон столбцов со 2-ого по 4-ый и напечатать все остальные.
Удаление Первых и Последних Символов из Строк в Bash
Я создал файл со следующим содержимым и буду использовать его в примерах ниже. Допустим нам необходимо удалить несколько символов с начала и с конца каждой строки этого файла.
Удалить Первые N Символов Каждой Строки
Используйте следующую команду чтобы удалить первые 5 символов каждой строки (удаляем первые 5 символов и печатаем каждую строку, начиная с 6-ого символа) :
Печать Строки Между Заданными Символами
Используйте следующую команду чтобы напечатать содержимое каждой строки между 9-ым и 20-ым символами в Bash :
Печать Первых N Символов Каждой Строки
Используйте следующую команду чтобы напечатать первые 20 символовкаждой строки в Bash :
Удалить Последний Символ Каждой Строки
Используя сочетание команд reverse и cut, мы можем удалять последние N символов каждой строки, как показано ниже. (источник) Используйте следующую команду чтобы удалить последний символ каждой строки в Bash :
Удалить Последние N Символов Каждой Строки
Используйте следующую команду чтобы удалить последние 8 символовкаждой строки в Bash :
Добавить Символ в Начале или в Конце Каждой Строки с AWK и SED
Я создал файл со следующим содержимым и буду использовать его в примерах ниже :
Допустим нам необходимо добавить символы в НАЧАЛЕ или в КОНЦЕ каждой строки этого файла.
Добавить Символы в НАЧАЛЕ Каждой Строки
Используйте следующие команды, чтобы добавить один или несколько символов в НАЧАЛЕ каждой строки файла :
Закомментировать Строки в Файле
Используйте следующую AWK команду для того, чтобы закомментировать все строки файла, вставив «#» (знак решетки) в НАЧАЛЕ каждой строки файла :
Добавить Символы в КОНЦЕ Каждой Строки
Используйте следующие команды, чтобы добавить какой-либо текст в КОНЦЕ каждой строки файла :
Добавить Точку с Запятой в Конце Каждой Строки
Используйте следующую AWK команду для того, чтобы вставить «;» (точку с запятой) в КОНЦЕ каждой строки файла :
Добавить Символы в НАЧАЛЕ и в КОНЦЕ Строк
Используйте следующие команды, чтобы добавить какой-либо префикс в НАЧАЛЕ и какой-либо суффикс в КОНЦЕ каждой строки файла :
Добавить Запятые и Напечатать в Одну Строку
Я часто использую следующую команду для того, чтобы добавить в конце каждой строки файла, кроме последней, по запятой, а затем вывести весь файл в одну строку :
Проверить Существует ли Файл
В процессе написания BASH скриптов, очень часто возникает ситуация, когда необходимо проверить существование файла, прежде чем предпринимать какие-либо действия.
Эта работа для команды test (то же, что и []). Эта команда позволяет проводить ряд тестов, и по окончанию устанавливает код завершение равным 0 (правда) или 1 (ложь), в зависимости от того, чем окончился тест.
Синтаксис
Основные параметры
Параметры
Описание
-e
Возвращает значение если файл существует
-f
Возвращает значение если файл существует и это обычный файл
-r
Возвращает значение если файл существует и он доступен для чтения
-w
Возвращает значение если файл существует и он доступен для записи
-x
Возвращает значение если файл существует и он исполняемый
Примеры
1. Проверим существует ли файл /etc/passwd и напечатаем Файл Найден, если он существует :
2. Проверим существует ли файл /etc/passwd и напечатаем Файл НЕ Найден, если он НЕ существует :
3. Проверим существование файла /etc/passwd и выполним какое-либо действие если он существует, либо иное действие, если этот файл НЕ существует :
Пример BASH Скрипта
Этот скрипт проверяет существует ли файл или нет :
Сохраните и выполните скрипт :
chmod +x script.sh ./script.sh /path/to/SomeFile.txt The File ‘/path/to/SomeFile.txt’ Does Not Exist ./script.sh /etc/resolv.conf The File ‘/etc/resolv.conf’ Exists
Напечатать Usage и Прервать Скрипт при Незаданных Аргументах
Используйте следующую проверку в shell скриптах, чтобы :
1. проверить количество входящих аргументов
2. вывести сообщение об ошибке, если количество входящих аргументов некорректно
3. прервать shell скрипт со статусом ошибки
Параметр
Описание
$#
переменная, содержащая количество аргументов, преданных скрипту
-eq 0
проверяем, равняется ли количество переданных аргументов нулю
$0
возвращает путь к shell скрипту
Пример Bash Скрипта
Следующий скрипт использует команду dig для поиска DNS-сервера доменного имени. Проверяемый домен должен передаваться скрипту в качестве аргумента.
Пример выполнения скрипта, если аргумент не указан :
$ ./find_ns.sh Usage: ./find_ns.sh domain_name
Пример работы скрипта при заданном аргументе : $ ./find_ns.sh shellhacks.com ns2.ukraine.com.ua. ns3.ukraine.com.ua. ns1.ukraine.com.ua.
CASE — Оператор Выбора в Bash
Базовый Синтаксис Оператора Выбора CASE
Пример BASH Скрипта с Оператором CASE
Примеры работы скрипта : $ ./testcase.sh Какой Linux дистрибутив Вы знаете? centos Эй! Это моя любимая серверная операционная система! $ ./testcase.sh Какой Linux дистрибутив Вы знаете? rhel Эй! Это моя любимая серверная операционная система! $ ./testcase.sh Какой Linux дистрибутив Вы знаете? ubuntu Я тоже знаю ubuntu! Это операционная система, основанная на Debian. $ ./testcase.sh Какой Linux дистрибутив Вы знаете? pfff Хмм, кажется я никогда не использовал этот дистрибутив.
«Да/Нет» в Bash Скрипте — Запрос Подтверждения
В bash скриптах очень часто возникает необходимость приостановить выполнение задачи и поставить пользователю вопрос, на который тот должен ответить Да или Нет.
Например, перед выполнением потенциально опасной части bash скрипта, хорошей идеей будет запросить подтверждение у пользователя, задав вопрос — «Вы уверены?».
В этой заметке Вы найдете три самых простых и быстрых способа задать «Да/Нет» вопрос в bash скрипте.
Запрос о Продолжении в Bash
Лучший способ запросить подтверждение на продолжение в bash скрипте — это с помощью команды read (источник) :
Простой «Да/Нет» Вопрос в Bash
Одним из самых распространенных способов постановки вопросов в bash скриптах — это комбинирование команд read + case (источник) :
Выбираем «Да/Нет» из Меню в Bash
Еще один легкий способ — с помощью команды select (источник) :
Выполнить и Повторить Команду N Раз в Bash
Иногда возникает необходимость несколько раз выполнить одну и ту же команду из командной строки в Linux.
В Bash существует простая конструкция, с помощью которой команду можно прописать один раз, но сделать так, чтобы она была выполнена N раз.
Из этой небольшой заметки вы узнаете, что лучший способ чтобы выполнить одну и ту же команду N раз подряд — это использовать цикл FOR в Bash.
Повторить Команду Несколько Раз в Linux Shell
Используйте следующий синтаксис, чтобы выполнить какую-либо команду 5 раз :
Давайте поможем Барту Симпсону со школьной доской :
Если вам необходимо часто использовать такую конструкцию, тогда не помешает создать соответствующую Bash функцию (добавьте в
Добавить комментарий Отменить ответ
Для отправки комментария вам необходимо авторизоваться.