2015-08-20 4 views
0

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

ps axu | awk '{print $2, $3, $4, $11}' | head -1 && ps axu | awk '{print $2, $3, $4, $11}' | sort -k3 -nr |head -20 

Я попытался добавить ниже линии .bashrc файла

alias abc='ps axu | awk '{print $2, $3, $4, $11}' | head -1 && ps axu | awk '{print $2, $3, $4, $11}' | sort -k3 -nr |head -20' 

Но не везло, я получаю ниже ошибки

$abc 
Usage: grep [OPTION]... PATTERN [FILE]... sort: read failed: /apps/: Is a directory Try 'grep --help' for more information. 
+0

В теории вы можете избавиться от команды 'awk', указав' ps', какие столбцы для печати. На практике, удачи, выяснить, как. Возможно, 'ps -opid, pcpu, pmem, comm ax'? – chepner

+0

'ps -e -sort -pmem -opid, pcpu, pmem, comm | head -20' почти делает то, что вы хотите, избегая необходимости 'awk' или' sort', хотя, насколько я могу судить, он не будет сортировать в поле 'pmem'. – chepner

+0

Спасибо всем за быстрый ответ !!! – Kaushik

ответ

3

Вот подсказка: не называют ps дважды: выход трубы к группе команд. Как функция, у вас будет гораздо меньше цитирования скорби.

abc() { 
    ps axu | awk '{print $2, $3, $4, $11}' | { 
     IFS= read -r header && echo "$header" # the first line 
     sort -k3 -nr | head -20    # all the rest 
    } 
} 
+1

Разве это не приведет к удалению первой строки из отсортированного вывода? т. е. не следует ли это '{echo" $ header "; Кот; } | sort -k3 -nr | голова -20' или что-то в этом роде? Или вы предполагаете, что сортировка все равно выйдет из этой строки, так что это не имеет значения (это заголовок и все))? –

+0

Я бы использовал 'tee' (если это имеет значение):' ps | awk | tee> (read -r; echo "$ REPLY") | сортировать | head'. – chepner

+0

Вот что я думаю, что OP хочет (что он должен * хотеть, я имею в виду): показать заголовок и отсортировать остальную часть. –

0

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

Когда вы зацикливаете одиночные кавычки awk-скриптов внутри одинарных кавычек для псевдонимов сопоставления котировок неправильно.

Заменить каждую «внутреннюю» одиночную кавычку '\'', и она должна работать.

alias abc='ps axu | awk '\''{print $2, $3, $4, $11}'\'' | head -1 && ps axu | awk '\''{print $2, $3, $4, $11}'\'' | sort -k3 -nr |head -20' 
+0

AWK: «{печать AWK:^недопустимый символ„“» в выражении AWK: «{печать AWK:^недопустимый символ„“» в выражении – Kaushik

+0

получение выше ошибки – Kaushik

+0

Он работал для меня в быстром тесте, но Glenn Джекмана ответ лучше. –

1

Команда ps очень настраиваемая. Эти две команды почти эквивалентны, ваш выбор по AWK, и сконфигурированный формат пс:

ps axu | awk '{print $2, $3, $4, $11}' 
ps axopid,pcpu,pmem,comm 

Если форматирование пользователя u был заменен на специальный формат o pid,pcpu,pmem,cmd. Is аналогичен, не идентичен только из-за имени команды и некоторого форматирования. Пойдем к этому чуть позже.

Если имя команды не прерыватель сделки, пс мог даже сортировать по некоторому выбранному ключу с опцией k, и выбирая только 20 строк мы получаем:

ps axopid,pcpu,pmem,comm k-pmem | head -20 

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

Но если вам нужен идентичный результат в качестве оригинала, нам нужно развернуть команду, чтобы показать все аргументы. Такой вывод очень длинный для некоторых команд и плохо форматирует. Кроме того, обработка awk, которую вы использовали, НЕ может быть воспроизведена простым ps. Нам нужно вырезать командную часть в первом пространстве и, чтобы получить лучшее форматирование, нам нужна некоторая любовь к printf.

Все сказанное, это получает точно такой же результат (ну, немного лучше отформатирован):

ps axopid,pcpu,pmem,cmd k-pmem | head -20 | awk ' 
    {gsub(/ .*/, "", $4); printf "%5s %4s %4s %-.50s\n", $1,$2,$3,$4}' 

И, просто делает его единственную линию, чтобы использовать его немного проще копировать/вставить:

ps axopid,pcpu,pmem,cmd k-pmem | head -20 | awk '{gsub(/ .*/, "", $4); printf "%5s %4s %4s %-.50s\n", $1,$2,$3,$4}' 

Таким образом, псевдоним становится только одной линией.

Надеюсь, вы сможете получить псевдоним.

Смежные вопросы