#!/bin/bash
pid=$(ps -eo %cpu,pid --sort -%cpu | head -n 2 | awk '{print $1 " " $2}')
if [[ -n $pid ]]; then
kcpu=$(echo $pid | awk '{print $3}')
kpid=$(echo $pid | awk '{print $4}')
ift=$(echo "90"'<'$kcpu | bc -l)
if [ $ift -eq "0" ]; then
echo "kpid = $kpid"
kill $kpid
fi
else
echo "Does not exist"
fi
Основная проблема в том, что вы сбежали >
и |
, и я подозреваю, что вы используете GNU sed
. В этом случае \>
действует как конец границы слова, а \|
— как оператор чередования.
$ sed 's/>ref|\(NC_03578[0-9]\.1\)|.*/>\1/' chr.test
>NC_035781.1
>NC_035782.1
>NC_035783.1
>NC_035784.1
Измененная команда показана выше. Кроме того, кажется, что в конце строки есть пробелы, поэтому я добавил .*
, чтобы удалить их. Используйте sed -n '/NC_/ s/>ref|\(NC_03578[0-9]\.1\)|.*/>\1/p'
, чтобы включить операцию grep
в сам sed
Вы также можете использоватьawk
$ awk -F'|' '/NC_/{print ">" $2}' chr.test
>NC_035781.1
>NC_035782.1
>NC_035783.1
>NC_035784.1
-F'|'
, чтобы определить |
как разделитель полей. |
является оператором регулярного выражения, но когдаFS
(специальная переменная awk разделителя полей, установленная -F
), является одним символом, она не рассматривается как регулярное выражение. -F'[|]'
или -F'\\|'
также будут работать, но менее эффективны. /NC_/
, если строка ввода содержит NC_
print ">" $2
напечатать >
символ и второе поле