Je voudrais filtrer par temps. par exemple:dmesg -sec 30
La sortie serait des événements qui se sont produits au cours des 30 dernières secondes. Ou avec intervalle de temps. Tout filtrage avec le temps.
Écrivez un script pour ajouter l'heure actuelle à l'horodatage dans l'entrée dmegs, puis comparez l'heure à l'heure actuelle et affichez les lignes plus récentes que l'intervalle souhaité.
Ceci est un exemple:
#!/bin/bash
if [ $# -eq 0 ]
then
echo "Argument Error. Please specify the Time interval in seconds."
exit
fi
timeinterval=$1 # change this to the desired time interval
currenttime=$(date +%s)
string="$(who -b | awk '{print $3"-"$4}')"
IFS='-' read -a array <<< "$string"
MONTHS=(X Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec)
year="${array[0]}"
month=${MONTHS[${array[1]}]}
day="${array[2]}"
hour="${array[3]}"
daystring="$month $day $year $hour"
bootime=$(date --date="$daystring" +%s)
dmesg | while read line; do
dmesgstamp=$(echo "$line" | awk -F'[' '{print $2}' | awk -F\. '{print $1}')
dmesgstamp=$((dmesgstamp += bootime))
results=$((currenttime-dmesgstamp))
if ((results < timeinterval)); then
echo "$line"
fi
done
Exécutez le script avec l'intervalle en secondes comme argument:
$ ./script.sh 30