top -p `pgrep -d "," java`
Объяснение:
top -p pid1, pid2
: показать информацию о нескольких процессах, pid должен быть разделен ,
pgrep -d "," java
: вывести идентификаторы всех программ на Java, по умолчанию эти идентификаторы разделяются новой строкой. используйте -d ","
, чтобы разделить его на ,
, как того требует верх. Если вы видите ошибку типа top: -p аргумент отсутствует
, это означает, что Java-программа не запущена, т.е. pgrep не выводит данные.
вы можете сделать что-то вроде этого
awk '{print $1,$2,$3,":",$NF}' logfile
Вы можете использовать cut как:
Команда:
cut --complement -c17-43 file1.txt
Вывод:
Mar 23 08:20:23 : 235
Mar 23 08:21:45 : 127
Mar 23 08:22:34 : 875
Mar 23 08:25:46 : 322
Mar 23 08:26:12 : 639
perl -F '' -lane 'print @F[0..15, -5..-1]' yourfile
-F ''
=> разбиваем строку на отдельные символы, то есть все поля толщиной в 1 символ.
-l
=> ORS=\n
-a
=> @F массив содержит поля, например, $F[15] => содержит 16-й символ
-n
=> не печатать, если не попросить
@F[0..15, -5... -1]
=> это фрагмент массива @F
с первыми 16 символами и последними 5 символами, что-то вроде cut
Вы можете использовать sed
:
sed -r "s/^(.{15} ?).*(.{5})$/\1\2/" logfile
В соответствии с предложениями, я сделал первый шаблон подходящим для однозначных дней, которые могут быть не дополнены нулями, и использовать .*
для среднего шаблона, чтобы быть более гибким.
В awk это выглядит примерно так. Очень просто.
[zee@dev-instance temp]$ cat file1.txt
Mar 23 08:20:23 New file got created in sec: 235
Mar 23 08:21:45 New file got created in sec: 127
Mar 23 08:22:34 New file got created in sec: 875
Mar 23 08:25:46 New file got created in sec: 322
Mar 23 08:26:12 New file got created in sec: 639
[zee@dev-instance temp]$ awk -F" " '{ print $1" "$2" "$3" : "$10 }'<file1.txt
Mar 23 08:20:23 : 235
Mar 23 08:21:45 : 127
Mar 23 08:22:34 : 875
Mar 23 08:25:46 : 322
Mar 23 08:26:12 : 639
[zee@dev-instance temp]$
вы можете сделать что-то вроде этого
cut -c1-15 logfile > file;
cut -c44- logfile > file1;
paste file file1 > logfilenew;
rm file file1;
cat logfilenew
вывод будет храниться в logfilenew.
Как об этом:
sed -e 's/^\(.\{4\}\).*\(.\{4\}\)$/\1 \2/'
(Вы можете выяснить перенаправление ввода-вывода или дать имя файла и т. д. См. sed(1) для получения дополнительной информации о вызове.)
Здесь я выбрал количество символов, равное ровно 4, но вы можете заменить любое число(а), которое вам нравится. Обратите внимание, что первое и последнее количество символов могут даже отличаться:
sed -e 's/^\(.\{5\}\).*\(.\{2\}\)$/\1 \2/'
Это вернет первые 5 символов и последние 2 символа каждой строки. Я оставлю это вам, чтобы выяснить, как параметризовать это дальше.
Также обратите внимание, что я выбрал sed(1), а не grep(1) (или один из его вариантов). Я знаю, что это может быть не совсем то, что вы хотите, поскольку вы просили регулярное выражение grep, а не регулярное выражение sed.