вывести номер столбца и «ОШИБКА», если он имеет пустое поле, иначе «ПРАВИЛЬНО», если он не имеет пустых полей

Итак, получается, я неправильно понял auditctl. Я смог использовать его, чтобы выследить преступника.

Оказывается это был индикатор -sysmonitor . Он периодически умирает в Ubuntu, поэтому я завернул его в скрипт, который перезапускает его каждую минуту. Я предполагаю, что он создает этот файл только при запуске, и, возможно, то, как я его убиваю, не дает ему возможности очиститься. (Я предполагаю, что ошибка произошла с моей стороны, а не из-за того, что она не смогла очиститься после себя.)

Для потомков, вот как я это выследил.

Сначала я начал auditdсмотреть/tmp:

$ sudo auditctl -w /tmp

Затем, после просмотра достаточно долго, чтобы зарегистрировать создание одного из файлов, я выбрал самый последний и искал его в журналах:

$ ls -lt /tmp/tmp*.svg | head -n 1
-rw------- 1 me me 262 Jul  5 13:42 /tmp/tmp4i0zh3mj.svg
$ ausearch -i -f /tmp/tmp4i0zh3mj.svg

Выходные данные содержат несколько записей нескольких процессов, но только один, чей nametypeравен CREATE. Команда(proctitle)этого была /usr/bin/python3 /usr/bin/indicator-sysmonitor.

0
02.05.2021, 21:06
3 ответа
$ awk -F, '{ count=0; for(i=1; i<=NF; i++) count+=$i=="" 
           print NR, count? "ERROR" :"CORRECT";
}' infile
1 ERROR
2 ERROR
3 ERROR
4 CORRECT
5 ERROR
6 ERROR

если вы хотите напечатать количество пустых столбцов вместо номера строки:

$ awk -F, '{ count=0; for(i=1; i<=NF; i++) count+=$i==""
             print count? count " ERROR":"All CORRECT"
  }' infile
1 ERROR
4 ERROR
3 ERROR
All CORRECT
1 ERROR
3 ERROR
1
28.07.2021, 11:35
$ awk '{print NR, (/^,|,,|,$/ ? "ERROR" : "CORRECT")}' file
1 ERROR
2 ERROR
3 ERROR
4 CORRECT
5 ERROR
6 ERROR
1
28.07.2021, 11:35

Я бы использовал awkдля этой цели.

awk -F',' '{for(i=1;i<=NF;i++) { if($i=="") error[NR]++} print (error[NR])? NR " ERROR":NR " CORRECT"}' file.csv

for(i=1;i<=NF;i++) { if($i=="") error[NR]++}. Это выражение ищет пустые столбцы ($1==""), и всякий раз, когда оно находит пустой столбец, значение error[NR]увеличивается на 1. Если это не находит пустого столбца, тогда error[NR]ложно. Например, нет значения error[4]. Посмотрим:

awk -F',' '{for(i=1;i<=NF;i++) { if($i=="")  error[NR]++ } print "error[" NR"] =", error[NR]}' file.csv
error[1] = 1
error[2] = 4
error[3] = 3
error[4] = 
error[5] = 1
error[6] = 3

Поскольку error[4]ложно, печатается утверждение после :NR " CORRECT"}'. Если error[NR]истинно, утверждение после ? печатается.

0
28.07.2021, 11:35

Теги

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