Вы могли рассмотреть использование петлевых файловых систем.
Во-первых, создайте файл для содержания файловой системы:
dd if=/dev/zero of=~/myfilesys bs=8K count=256
Это создаст пустой файл на 2 ГБ. Затем, необходимо подключить его к устройству закольцовывания:
losetup /dev/loop0 ~/myfilesys
Теперь, создайте файловую систему:
mkfs -t ext3 /dev/loop0
Наконец, смонтируйте свою файловую систему:
mkdir ~/myfilesys.d
mount /dev/loop0 ~/myfilesys.d
Когда Вы закончены:
umount /dev/loop0
losetup -d /dev/loop0
И снова использовать позже:
losetup /dev/loop0 ~/myfilesys
mount /dev/loop0 /mnt/myfilesys.d
(Да, я знаю, что можно объединиться losetup
и mount
шаги, но в иллюстративных целях, это более ясно видеть то, что продолжается путем разделения их).
Теперь, ~/myfilesys
файл будет смотреть и действовать как файл всех команд, но при монтировании Вы видите файлы в этой файловой системе в ~/myfilesys.d
.
Принятие Вас находится на Linux, выводе atq
всегда имеет дату в том же формате. Отсортируйте поля в соответствующем порядке, заботясь для объявления, которые имена месяца или числа. Удостоверьтесь, что использовали английскую локаль для имен месяца, так как это что atq
использование.
atq | sort -k 6n -k 3M -k 4n -k 5 -k 7 -k 1
# year month day time queue id
sort
команда может сделать это, но к сожалению, Вы не можете использовать --month-sort
и --numeric-sort
вместе. Так использование:
$ atq |
sed 's/Jan/1/;s/Feb/2/;s/Mar/3/;s/Apr/4/;s/May/5/;s/Jun/6/;s/Jul/7/;s/Aug/8/;s/Sep/9/;s/Oct/10/;s/Nov/11/;s/Dec/12/' |
sort -n -k6,6 -k3,4
Это преобразует сокращения месяца в их числовые значения, затем вид сначала в год (-k6,6
), затем месяц и день (-k3,4
). Вывод не будет иметь имен месяца, но если бы Вы действительно хотели, то Вы могли бы преобразовать тех, которые назад имеют другого sed
.
$ atq |
sed 's/Jan/1/;s/Feb/2/;s/Mar/3/;s/Apr/4/;s/May/5/;s/Jun/6/;s/Jul/7/;s/Aug/8/;s/Sep/9/;s/Oct/10/;s/Nov/11/;s/Dec/12/' |
sort -n -k6,6 -k3,4 |
sed 'h;s/^[0-9][0-9]* *[A-Z][a-z][a-z] *\([0-9][0-9]*\).*/\1/;s/10/Oct/;s/11/Nov/;s/12/Dec/;s/1/Jan/;s/2/Feb/;s/3/Mar/;s/4/Apr/;s/5/May/;s/6/Jun/;s/7/Jul/;s/8/Aug/;s/9/Sep/;G;s/^\(.*\)\n\([0-9][0-9]* *[A-Z][a-z][a-z] *\)[0-9][0-9]*\( .*\)/\2\1\3/'
Заметьте это s/12/Dec/
потребности прибыть прежде s/1/Jan/
.
date
команда имеет специальные анализирующие метку времени полномочия, которые могли сделать это более простым при питании правые стороны поля, например, с cut
.
– Marcos
23.03.2012, 14:07
-k
опция: -k 3M
и так далее.
– Gilles 'SO- stop being evil'
23.03.2012, 21:14
Взгляды усложнили, но это также работает:
atq |awk '{system("echo "$1 " $(date +%Y-%m-%d_%H-%M-%S \
--date \""$2" "$3" "$4" "$5" "$6"\") "$7" "$8 )}' |sort -k2
469 2012-03-24_01-30-00 a master
655 2012-03-24_02-03-00 a master
671 2012-03-24_02-04-00 a master
657 2012-03-24_02-09-00 a master
673 2012-03-24_02-11-00 a master
537 2012-03-25_00-38-00 a master
539 2012-03-25_00-43-00 a master
652 2012-03-27_12-57-00 a master
654 2012-03-27_13-03-00 a master
656 2012-03-27_13-09-00 a master
По сравнению с другими предложениями мне нравится, как фактическому парсингу оставляют date
который понимает текстовую метку времени, таким образом, можно переформатировать, к чему Вы хотите, который делает ее бризом, чтобы отфильтровать или отсортировать позже.
Можно лавировать на a |column -t
в конце, чтобы приятно выровняться и растянуть поля.
bash readline
вместо awk
– Marcos
24.03.2012, 02:20