вычислить общее время входа в сеть

Попробуйте:

sed -e 's/\([A-Za-z]\)\1/\1/g'  

Просто удалите \\\+, тогда только удвоенные буквы сократятся до одной. (Работает при условии, что все символы были продублированы)

Попробуйте этот небольшой тест:

echo "PPaayy Atttteenttiioonn ttoo aallll ccoommmmaanndds" > test.txt
sed -e 's/\([A-z]\)\1/\1/g' < test.txt > test2.txt
cat test2.txt
0
07.10.2018, 18:17
2 ответа

Вы можете попробовать sedи awkдля этой задачи:

    cat file | sed -r 'N; s/\n/ /; s/] User logged [^ ]+//g; y/[:/  /' | awk '{s += ($4-$1)*3600 + ($5-$2)*60 + $6-$3}END {printf "%d:%02d:%02d\n", s/3600, s/60%60, s%60}'

    5:06:06

sedвыстроит временные интервалы «вход» и «выход из системы» для каждого пользователя, затем awkвыполнит расчет времени для соответствующих столбцов.

1
28.01.2020, 02:42

Если это предусмотрено вашей системой, вы также можете попробовать комбинацию date, с опцией-f(ввода файла ), читающей из «подстановки процесса», чтобы получить секунды, и простой awkсуммирование:

date -f <(cut -c2-9 file1) +%s | awk '{getline X; SUM += X - $0} END {printf "%02d:%02d:%02d\n", SUM/3600, SUM/60%60, SUM%60}'
05:06:06
0
28.01.2020, 02:42

Теги

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