Появилась свободная минутка, и я решил закончить давно начатый скрипт, который бы обрабатывал выходную информацию команды
qstat -n
и предоставлял ее в более сжатой форме. Например, многие меня спрашивали, можно ли сделать так, чтобы при проверке своей задачи можно было бы увидеть на каком узле задача считается, потому что команда nodes, про которую я писал ранее показывает общее состояние кластера, а писать qstat -n не очень удобно. Во-первых, это надо запомнить. Во-вторых, это надо нажимать на 3 клавиши больше. В-третьих, вывод этой команды громоздкий, не все пользователи могут адекватно его воспринимать. Заодно и получилось попрактиковаться и улучшить свое умение в написании однострочных скриптов.
Итак, скрипт выглядит следующим образом
#!/bin/sh
echo -e "\E[36;40m ID S User JobName Node\E[0;0m"
echo -e "\E[36;40m=======================================================\E[0;0m"
qstat -n -1 | sed '1~0d' | sed '1~0d' | sed '1~0d' | sed '1~0d' | sed '1~0d' | awk '{print "\033[1;33m" $1 "\033[0m"," ", "\033[1;34m" $10 "\033[0m"," ", "\033[1;31m" $2 "\033[0m" ,"\t", "\033[1;32m" $4 "\033[0m"," ","\t", "\033[1;31m" $12 "\033[0m"}' | awk -F "/" '{print $1}'
Жирные строки выводят шапку. Видно, что на выходе будет информация по ID задачки, ее статусе в очереди, имени задачи, имени пользователя и узле на котором идет счет.
Красным показана исходная команда, которую скрипт будет модифицировать.
Синим идут команды, которые просто говорят, что первые 5 строк будут пропущены, а обработке подвержены все остальные. Немного топорная часть, потому что писать пять раз одну и ту же команду как-то глупо, но по-другому у меня не получилось :(
Зеленым показаны команды вывода нужного содержимого через awk.
Розовым опять же команда awk, которая причесывает предыдущий вывод.
Теперь последовательно, что у нас будет на выходе каждой составной части команды:
[alex@tisnum-head1 sys]$ qstat -n -1
tisnum-head1.cluster:
Req'd Req'd Elap
Job ID Username Queue Jobname SessID NDS TSK Memory Time S Time
-------------------- -------- -------- ---------------- ------ ----- --- ------ ----- - -----
4422.tisnum-head alex batch D2_1000 27609 1 32 -- 1000: R 28:34 node04/31+node04/30+node04/29+node04/28+node04/27+node04/26+node04/25+node04/24+node04/23+node04/22+node04/21+node04/20+node04/19+node04/18+node04/17+node04/16+node04/15+node04/14+node04/13+node04/12+node04/11+node04/10+node04/9+node04/8+node04/7+node04/6+node04/5+node04/4+node04/3+node04/2+node04/1+node04/0
Окончательный вариант:
[alex@tisnum-head1 sys]$ qstat -n -1 | sed '1~0d' | sed '1~0d' | sed '1~0d' | sed '1~0d' | sed '1~0d' | awk '{print "\033[1;33m" $1 "\033[0m"," ", "\033[1;34m" $10 "\033[0m"," ", "\033[1;31m" $2 "\033[0m" ,"\t", "\033[1;32m" $4 "\033[0m"," ","\t", "\033[1;31m" $12 "\033[0m"}' | awk -F "/" '{print $1}'
4422.tisnum-head R alex D2_1000 node04
Теперь, что будет показывать, когда мы запустим наш скрипт полностью:
[alex@tisnum-head1 sys]$ qst
ID S User JobName Node
=====================================
4422.tisnum-head R alex D2_1000 node04
Все очень красочно и информативно:)
qstat -n
и предоставлял ее в более сжатой форме. Например, многие меня спрашивали, можно ли сделать так, чтобы при проверке своей задачи можно было бы увидеть на каком узле задача считается, потому что команда nodes, про которую я писал ранее показывает общее состояние кластера, а писать qstat -n не очень удобно. Во-первых, это надо запомнить. Во-вторых, это надо нажимать на 3 клавиши больше. В-третьих, вывод этой команды громоздкий, не все пользователи могут адекватно его воспринимать. Заодно и получилось попрактиковаться и улучшить свое умение в написании однострочных скриптов.
Итак, скрипт выглядит следующим образом
#!/bin/sh
echo -e "\E[36;40m ID S User JobName Node\E[0;0m"
echo -e "\E[36;40m=======================================================\E[0;0m"
qstat -n -1 | sed '1~0d' | sed '1~0d' | sed '1~0d' | sed '1~0d' | sed '1~0d' | awk '{print "\033[1;33m" $1 "\033[0m"," ", "\033[1;34m" $10 "\033[0m"," ", "\033[1;31m" $2 "\033[0m" ,"\t", "\033[1;32m" $4 "\033[0m"," ","\t", "\033[1;31m" $12 "\033[0m"}' | awk -F "/" '{print $1}'
Жирные строки выводят шапку. Видно, что на выходе будет информация по ID задачки, ее статусе в очереди, имени задачи, имени пользователя и узле на котором идет счет.
Красным показана исходная команда, которую скрипт будет модифицировать.
Синим идут команды, которые просто говорят, что первые 5 строк будут пропущены, а обработке подвержены все остальные. Немного топорная часть, потому что писать пять раз одну и ту же команду как-то глупо, но по-другому у меня не получилось :(
Зеленым показаны команды вывода нужного содержимого через awk.
Розовым опять же команда awk, которая причесывает предыдущий вывод.
Теперь последовательно, что у нас будет на выходе каждой составной части команды:
[alex@tisnum-head1 sys]$ qstat -n -1
tisnum-head1.cluster:
Req'd Req'd Elap
Job ID Username Queue Jobname SessID NDS TSK Memory Time S Time
-------------------- -------- -------- ---------------- ------ ----- --- ------ ----- - -----
4422.tisnum-head alex batch D2_1000 27609 1 32 -- 1000: R 28:34 node04/31+node04/30+node04/29+node04/28+node04/27+node04/26+node04/25+node04/24+node04/23+node04/22+node04/21+node04/20+node04/19+node04/18+node04/17+node04/16+node04/15+node04/14+node04/13+node04/12+node04/11+node04/10+node04/9+node04/8+node04/7+node04/6+node04/5+node04/4+node04/3+node04/2+node04/1+node04/0
Убираем ненужные 5 строк:
[alex@tisnum-head1 sys]$ qstat -n -1 | sed '1~0d' | sed '1~0d' | sed '1~0d' | sed '1~0d' | sed '1~0d'
4422.tisnum-head alex batch D2_1000 27609 1 32 -- 1000: R 28:35 node04/31+node04/30+node04/29+node04/28+node04/27+node04/26+node04/25+node04/24+node04/23+node04/22+node04/21+node04/20+node04/19+node04/18+node04/17+node04/16+node04/15+node04/14+node04/13+node04/12+node04/11+node04/10+node04/9+node04/8+node04/7+node04/6+node04/5+node04/4+node04/3+node04/2+node04/1+node04/0
Причесываем вывод с помощью awk:
[alex@tisnum-head1 sys]$ qstat -n -1 | sed '1~0d' | sed '1~0d' | sed '1~0d' | sed '1~0d' | sed '1~0d' | awk '{print "\033[1;33m" $1 "\033[0m"," ", "\033[1;34m" $10 "\033[0m"," ", "\033[1;31m" $2 "\033[0m" ,"\t", "\033[1;32m" $4 "\033[0m"," ","\t", "\033[1;31m" $12 "\033[0m"}'
4422.tisnum-head R alex D2_1000 node04/31+node04/30+node04/29+node04/28+node04/27+node04/26+node04/25+node04/24+node04/23+node04/22+node04/21+node04/20+node04/19+node04/18+node04/17+node04/16+node04/15+node04/14+node04/13+node04/12+node04/11+node04/10+node04/9+node04/8+node04/7+node04/6+node04/5+node04/4+node04/3+node04/2+node04/1+node04/0
Окончательный вариант:
[alex@tisnum-head1 sys]$ qstat -n -1 | sed '1~0d' | sed '1~0d' | sed '1~0d' | sed '1~0d' | sed '1~0d' | awk '{print "\033[1;33m" $1 "\033[0m"," ", "\033[1;34m" $10 "\033[0m"," ", "\033[1;31m" $2 "\033[0m" ,"\t", "\033[1;32m" $4 "\033[0m"," ","\t", "\033[1;31m" $12 "\033[0m"}' | awk -F "/" '{print $1}'
4422.tisnum-head R alex D2_1000 node04
[alex@tisnum-head1 sys]$ qst
ID S User JobName Node
=====================================
4422.tisnum-head R alex D2_1000 node04
Все очень красочно и информативно:)
Комментариев нет:
Отправить комментарий