Как создать программу запуска в XFce4, которая не открывает элементы дважды?

$ sort -k 3,3r session.log | awk '!seen[$2]++ { print }'
9 u1 2018-08-12 pass
6 u4 2018-07-11 pass
2 u2 2018-06-15 pass
3 u3 2018-05-18 pass

(El { print }se puede eliminar por completo, solo lo incluyo para mostrar lo que sucede. La acción predeterminada es imprimir todo el registro de entrada si la condición es verdadera.)

Esto ordena el archivo que tiene, por fechas decrecientes (la fecha más reciente primero ). El programa awklee los datos ordenados e imprime la primera entrada encontrada para cada usuario. La variable seenes una matriz/hash asociativo que utiliza los nombres de usuario como claves. Si su valor es cero para un usuario, entonces ese usuario aún no ha sido visto, por lo que se imprime la línea del archivo.


Tu código con mis anotaciones:

# get list of unique usernames from log:
( awk {print} session.log | cut -f2 -d' ' | sort | uniq ) > store.txt

# shorter equivalent:
# cut -d ' ' -f2 <session.log | sort -u >store.txt

# loop over the usernames:
for line in $(cat "store.txt")
do
    # get entries related to this user:
    grep "$line" session.log > "$line.txt"

    # echo the last entry:
    echo $(sort -k3 "$line.txt" | awk 'END{print}')

    # shorter equivalent of both of the above commands:
    # awk -v user="$line" '$2 == user { print }' session.log | sort -k3,3 | tail -n 1
done
rm -f store.txt

Entonces, un enfoque alternativo basado en su ciclo de shell:

cut -d ' ' -f2 <session.log | sort -u |
while read username; do
    awk -v user="$username" '$2 == user { print }' session.log | sort -k 3,3 | tail -n 1
done

Nuevamente, el { print }puede quedar fuera del script awkanterior.

Esto todavía ordena los subconjuntos del registro de sesión una vez para cada usuario, lo que es un desperdicio.

Pre -ordenar el registro por fechas decrecientes:

sort -k3,3r -o sorted.log session.log

cut -d ' ' -f2 <session.log | sort -u |
while read username; do
    awk -v user="$username" '$2 == user { print; exit }' sorted.log
done

rm sorted.log

Esto todavía requiere que escaneemos el registro desde arriba una vez por usuario. La mejora natural es permitir que awkrealice un seguimiento de qué usuarios se han visto y qué usuarios no se han visto, lo que le da mi respuesta en la parte superior.

1
11.07.2019, 22:43
1 ответ

Для этого можно установить wmctrlс помощью следующей команды:

bash -c 'wmctrl -a file1.txt || leafpad ~/file1.txt'

Опция -aпереключает на окно с заголовком, содержащим file1.txt. Однако, если команда не удалась, то есть ||, она откроет ваш файл.

2
27.01.2020, 23:30

Теги

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