Nepomuk больше нет, Baloo полностью заменяет Nepomuk и предлагает функции индексирования файлов, ранее предлагаемые Nepomuk.
Baloo также взаимодействует с Akonadi и предлагает индексирование почты и все другие семантические возможности, связанные с приложениями Kontact.
Функции индексирования файлов Baloo и индексирования почты полностью независимы. Отключение индексатора файлов не приведет к остановке индексатора почты. В настоящее время (KDE SC 4.13.0) невозможно отключить функции индексации почты без перекомпиляции компонентов и приложений PIM.
Чтобы отключить индексатор файлов, в настоящее время есть два метода:
Hidden = True
в ~ / .kde4 / share / autostart / baloo_file.desktop
файл baloo_file.desktop
можно скопировать в ваш дом из /usr/share/autostart/baloo_file.desktop
Первый способ - больше пользователей дружественен, но не всегда работает (в программе отслеживания ошибок KDE есть ошибка, связанная с этой проблемой).
В будущей версии будет предоставлен переключатель включения / выключения для более интуитивного отключения индексатора файлов.
Я попробовал программу индексатора файлов, но отказался от нее из-за замедления работы и отключил ее. С другой стороны, я считаю функцию индексации электронной почты весьма полезной и не навязчивой.
Так как вы хотите жестко -кодировать "сортировку", пусть awk скомпилирует данные для каждого блока в ассоциативный массив, а затем распечатает этот массив в нужном вам порядке:
BEGIN {
FS=":"
}
/./ {
values[$1]=$0
}
/^$/ {
print values["loginName"]
print values["cabLoginID"]
print values["session"]
print values["userAgent"]
print values["sessionStartTime"]
print values["memoryInfo"]
print values["totalJSHeapSize"]
print values["usedJSHeapSize"]
print ""
delete values
}
END {
print values["loginName"]
print values["cabLoginID"]
print values["session"]
print values["userAgent"]
print values["sessionStartTime"]
print values["memoryInfo"]
print values["totalJSHeapSize"]
print values["usedJSHeapSize"]
}
Затем запустите:
awk -f scriptfile.awk < input
В качестве альтернативы, если вам все равно, в каком порядке находятся строки блоков, но вы хотите, чтобы они по-прежнему были последовательно упорядочены, и у вас есть GNU awk,
BEGIN {
FS=":"
PROCINFO["sorted_in"]="@val_str_asc";
}
/./ {
values[$1]=$0
}
/^$/ {
asort(values)
for (element in values)
print values[element]
print ""
delete values
}
END {
asort(values)
for (element in values)
print values[element]
}
Приведенный выше скрипт печатает строки каждого блока в алфавитном порядке:
cabLoginID:053XCDTF8D4J6PD3BG8P
loginName:jack
memoryInfo:jsHeapSizeLimit:2217857988
session:cabSessionID:052FPBP6Q6X2XGERWHBT
sessionStartTime:2018-10-01T01:04:10.899Z
totalJSHeapSize:42358792
usedJSHeapSize:36482584
userAgent:Mozilla/5.0
...
Если вы хотите сортировать блок строк одним и тем же способом снова и снова, я не думаю, что для этого существует простой -лайнер.
Так как меня беспокоит то, что awk не перехватывает все строки из-за двоеточий во временах, я написал этот небольшой сценарий оболочки. Это фактически сортирует их по блокам. Порядок, в котором он у вас есть в блоках, определяется функцией printf. Обновите это, чтобы удовлетворить ваши потребности.
#!/bin/bash
declare -A arr
(
while read l; do
if [[ "" == "${l}" ]]; then
printf "loginName:%s~cabLoginID:%s~session:%s~userAgent:%s~sessionStartTime:%s~memoryInfo:%s~totalJSHeapSize:%s~usedJSHeapSize:%s~\n" ${arr[loginName]} ${arr[cabLoginID]} ${arr[session]} ${arr[userAgent]} ${arr[sessionStartTime]} ${arr[memoryInfo]} ${arr[totalJSHeapSize]} ${arr[usedJSHeapSize]}
unset arr
declare -A arr
continue
fi
k=${l%%:*}
v=${l#*:}
arr[${k}]=${v}
done
printf "loginName:%s~cabLoginID:%s~session:%s~userAgent:%s~sessionStartTime:%s~memoryInfo:%s~totalJSHeapSize:%s~usedJSHeapSize:%s~\n" ${arr[loginName]} ${arr[cabLoginID]} ${arr[session]} ${arr[userAgent]} ${arr[sessionStartTime]} ${arr[memoryInfo]} ${arr[totalJSHeapSize]} ${arr[usedJSHeapSize]}
) | sort | tr '~' '\n'
exit 0
Вы можете использовать Perl в режиме абзаца с настраиваемым порядком сортировки, определяемым с помощью хэша, например.
perl -00 -F'\n' -ne '
our %rank;
BEGIN {
%rank = (
loginName => 1,
cabLoginID => 2,
session => 3,
userAgent => 4,
sessionStartTime => 5,
memoryInfo => 6,
totalJSHeapSize => 7,
usedJSHeapSize => 8
);
}
%h = ();
map { ($k,$v) = split(/:/, $_, 2); $h{$k} = $v } @F;
for $k (sort { $rank{$a} <=> $rank{$b} } keys %h) { print "$k:$h{$k}\n" };
print "\n";
' file
Попробуйте также
awk '
BEGIN {for (n=split("loginName cabLoginID session userAgent sessionStartTime memoryInfo totalJSHeapSize usedJSHeapSize", T); n; n--) FLSQ[T[n]] = n
}
{for (i=1; i<=NF; i++) {n = split ($i, T, ":")
OUT[FLSQ[T[1]]] = $i
}
for (i=1; i<=NF; i++) $i = OUT[i]
split ("", OUT)
}
1
' RS="" ORS="\n\n" FS="\n" OFS="\n" file
loginName:jack
cabLoginID:053XCDTF8D4J6PD3BG8P
session:cabSessionID:052FPBP6Q6X2XGERWHBT
userAgent:Mozilla/5.0
sessionStartTime:2018-10-01T01:04:10.899Z
memoryInfo:jsHeapSizeLimit:2217857988
totalJSHeapSize:42358792
usedJSHeapSize:36482584
.
.
.
В разделе BEGIN
он определяет последовательность полей в выходных данных каждой записи, присваивая каждой метке поля возрастающий номер. При работе с многострочными записями, разбив метку на массив T
, заполняет массив OUT
всем полем, проиндексированным номером метки. Последнее действие перед печатью записи — перестроить всю $0 (= запись ). Все разделители полей и записей должны быть адаптированы к макету многострочной записи.