Вот еще несколько вариантов, которые не требуют предварительного знания первой строки:
perl -ne 'print unless $_ eq $k; $k=$_ if $.==1;
Флаг -n
указывает perl зациклить входной файл, сохраняя каждую строку как $_
. Флаг $k=$_ if $.==1;
сохраняет первую строку ($.
- это номер строки, поэтому $.==1
будет верно только для первой строки) как $k
. print unless $k eq $_
печатает текущую строку, если она не совпадает с сохраненной в $k
.
Альтернативно, то же самое в awk
:
awk '$0!=x;(NR==1){x=$0}' file
Здесь мы проверяем, совпадает ли текущая строка с тем, что сохранено в переменной x
. Если тест $0!=x
равен true (если текущая строка $0
не совпадает с x
), то строка будет напечатана, так как по умолчанию awk печатает истинные выражения. Первая строка (NR==1
) сохраняется как x
. Поскольку это делается после проверки соответствия текущей строки x
, это гарантирует, что первая строка также будет напечатана.
Вы хотите
PID=$(ps -ef|grep -v grep |grep '$p' | awk '{print $2}')
Но ИМХО вы должны найти способ получить PID процесса более прямым способом. Разве они не оставляют где-нибудь файл «.pid»? И нужно ли su
для выдачи стопа?