Вычисление среднего в awk на основе условий нескольких столбцов в csv

Да; есть некоторые индикаторы, которые могут существовать.

Нет; нет никакого способа предотвратить обнаружение подкованных пользовательских форм.

Хранилище

  • Самый оптимистичный вариант find. | xargs stat | grep 2018-05-03или для списка времен и файловfind. | xargs stat -c "%x %n" | sort -r | head
  • Флэш-память USB или SD-карты, вероятно, используют FAT32 для совместимости, что, насколько мне известно, (, но легко проверить с помощью md5sum *.img), не записывает количество подключений или время доступа к файлу, и даже если использовалась более продвинутая файловая система, данные могут быть копируется на уровне блока(cat /dev/sdb > backup_$(date --iso-8601).img).
  • Флэш-память USB или SD-карты обычно не имеют аппаратного управления HDD/SSD/EMMC/NVMe, которое обычно регистрирует использование (и отображается с помощью smartctl -a /dev/sdb), и даже это можно обойти, временно заменив платы контроллера.
  • Чтобы получить переносное хранилище с должным образом реализованным ведением журнала, шифрованием и TPM, потребуется разобрать чип и, возможно, электронный микроскоп стоимостью 60 000 долларов, чтобы считать данные незамеченными (и заменить чип на новый ).

Компьютер

  • Самый оптимистичный вариант — dmesg -T | grep "New USB device found" | grep "May 03", но dmesg -cи т. д. могут это прояснить.
  • Если у вас есть права root, а у них нет, вы можете использовать доставку журналов для отслеживания, но они могут просто загрузиться с живого дистрибутива USB, чтобы избежать этого.

Пример вывода;

2018-05-19 04:57:13.723849533 -0400./yum.sh
2018-05-18 17:00:01.271971441 -0400./food.sh

.

[Mon May 14 19:44:19 2018] usb usb2: New USB device found, idVendor=1d6b, idProduct=0002
[Mon May 14 19:44:19 2018] usb usb3: New USB device found, idVendor=1d6b, idProduct=0001
0
10.12.2019, 00:38
1 ответ

Как указал @Archemar , вы используете разные ключи массива. Я изменил их на $1"-"$2, чтобы лучше соответствовать вашему результату.

Другая проблема заключается в том, что поля два и три заключены в кавычки, что не очень хорошо для вычислений, поскольку значения поля 3 обрабатываются как нулевые. Быстрое решение — заменить все кавычки в $0пустой строкой.

awk -F',' '{
  gsub(/"/, "")
  airline[$1"-"$2]+=$3
  ++count[$1"-"$2]
}
END {
  for (key in airline) print "Average of",key,"is",airline[key]/count[key]
}' file

Выход:

Average of EN-New York City is 9
Average of AB-Boston is 3.5
Average of EV-Houston is -7
Average of OO-Mystic is 13

Если «вычислить среднее значение всех положительных значений 3-го столбца» означает, что следует учитывать только положительные значения, добавьте оператор if, как показано ниже. Я не совсем уверен, что вы этого хотите.

awk -F',' '{
  gsub(/"/, "")
  if ($3>0) {
    airline[$1"-"$2]+=$3
    ++count[$1"-"$2]
  }
}
END {
  for (key in airline) print "Average of",key,"is",airline[key]/count[key]
}' file

Выход:

Average of EN-New York City is 9
Average of AB-Boston is 19
Average of OO-Mystic is 13
0
28.01.2020, 03:02

Теги

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