🚿 Как захватить столбец из вывода команды и преобразовать его в строку |

🚿 Как захватить столбец из вывода команды и преобразовать его в строку

Мануал

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

Простейший сценарий использования – преобразовать вывод одного столбца в строку, разделенную табуляцией.

$ pgrep dnsmasq | paste -s
2430    2431

Это решение не очень хорошо работает с выводом ps, так как вы получаете избыточные пробелы, потому что данные выровнены по ним.

$ ps -opid= -u netdata | paste -s
 1943    1985   24046   24137

Вы можете удалить все пробелы и оставить значения разделенными, используя TAB

$ ps -opid= -u netdata | paste -s | tr -d ' ' 
1943    1985    24046   24137

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

$ ps -opid= -u netdata | paste -s -d " " | tr -s ' ' | sed 's.^ *..'
1943 1985 24046 24137

Это немного сложнее, когда вы хотите извлечь конкретный столбец.

$ ps ax --no-header | grep -v grep | grep sshguard | tr -s " " | sed "s.^ *.." | cut -d " " -f1 | paste -s -d ' '
1394 1449

Есть альтернатива, конечно.

Используйте awk для вывода определенного столбца, используя пользовательский разделитель выходных записей (встроенная переменная ORS).

$ ps ax --no-header |  awk  -v ORS=" " '/firefox/ {print $1} END{printf "\n"}' 
3867 3947 4058 4352 4604 4688 22346 

Пожалуйста, не спамьте и никого не оскорбляйте. Это поле для комментариев, а не спамбокс. Рекламные ссылки не индексируются!
Добавить комментарий

  1. Максим

    все на много проще:
    pgrep dnsmasq | paste -s -d” ”
    2430 2431
    ИЛИ
    echo $(pgrep dnsmasq)
    2430 2431
    ИЛИ
    echo $(ps -C dnsmasq -o pid=)
    2430 2431

    Чем короче строка, тем меньше ошибок…

    Ответить
  2. Максим

    а таким образом можно обратно из строки в столбец:
    echo -e {1..5} | tr -s ‘ ‘ ‘\n’
    1
    2
    3
    4
    5

    ИЛИ
    for i in {1..5}; do echo $i; done
    1
    2
    3
    4
    5

    Ответить