Использование awk из bash, как выполнить несколько операторов в предложении «if»?

Дерево процессов

Во время работы процесса попробуйте использовать ps с параметром f , чтобы увидеть иерархия процессов:

ps axuf

Затем вы должны получить дерево процессов, то есть вы должны увидеть родительский процесс gzip .

Если gzip является прямым потомком init , то, вероятно, его родитель уже завершил работу, поскольку очень маловероятно, что init создаст gzip процесс.

Crontabs

Кроме того, вы должны проверить свои crontab , чтобы увидеть, есть ли что-нибудь, создающее его. Выполните sudo crontab -l -u , где пользователь является пользователем наблюдаемого вами процесса gzip (в вашем случае это похоже на корень ).

Если у вас есть другие пользователи в этой системе, которые, возможно, занимались настройкой фоновых служб, проверьте также их crontab .Тот факт, что gzip запускается от имени root , не гарантирует, что исходный процесс, запустивший gzip , также был запущен от имени root . Вы можете увидеть список всех существующих crontab , выполнив sudo ls / var / spool / cron / crontabs .

Журналы

Проверьте все имеющиеся у вас системные журналы на предмет подозрительных записей во время создания процесса. Я не уверен, называет ли Kubuntu свои файлы журналов по-другому, но в стандартном Ubuntu вы должны хотя бы проверить / var / log / syslog .

Последний выбор: обертка gzip

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

0
11.02.2019, 22:24
3 ответа
awk 'BEGIN{count = 0} {if($6 == "MALE") {count+=1; print $2}} END{print count}' 

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

2
28.01.2020, 02:13

В ответ на ответ Дж.Р.Фергюсона вот что у вас есть, с отступом:

# count the number of males, and print every name
if($6 == "MALE")
    count+=1
print $2

А это ответ JRFergusons с отступом

# count and print only the males
if($6 == "MALE") {
    count+=1
    print $2
}

Awk использует ту же семантику скобок, что и C

2
28.01.2020, 02:13

Способ awkсделать это будет

awk '$NF == "MALE" { ++count; print $2 } END { print count }' file

То есть вы указываете количество блоков и соответствующие условия запуска. Условием увеличения countи вывода $2является то, что значением последнего поля($NF)является строка MALE. Условие для печати countсостоит в том, что у нас больше нет входных данных.

Вы могли бы сделать это и с ifутверждением:

awk '{ if ($NF == "MALE") { ++count; print $2 } } END { print count }' file

(обратите внимание на дополнительный набор фигурных скобок в первом блоке; тело оператора ifв противном случае было бы только следующим одиночным оператором ), но программа быстро становится трудной для чтения, и поскольку условие $NF == "MALE"применяется ко всему коду в этом блоке, мы можем а также полностью вывести его из блока.

7
28.01.2020, 02:13

Теги

Похожие вопросы