Если вы имеете в виду, что хотите иметь возможность запускать два экземпляра mc от одного и того же пользователя одновременно с разными каталогами конфигурации, насколько я могу судить, вы не можете. Путь жестко закодирован.
Однако, если вы имеете в виду, что хотите иметь возможность переключать, какой из каталогов config используется, то вот вам идея (проверено, работает). Вы, вероятно, хотите сделать это без запуска mc:
$HOME/mc_conf
, с поддиректорией, one
. $HOME/.config/mc
в $HOME/mc_conf/один
подкаталог один
каталог в виде $HOME/mc_conf/two
. Создайте скрипт, $HOME/bin/switch_mc
:
#!/bin/bash
configBase=$HOME/mc_conf
linkPath=$HOME/.config/mc
если [ -z $1 ] || [ ! -e "$configBase/$1" ]; тогда
эхо "Требуется достоверное имя субдиректории".
выход 1
убойный макияж
объём оборотов $linkPath
ln -sv $configBase/$1 $linkPath
Запустите это, switch_mc one
. rm
не будет лаять о таком файле, это не имеет значения.
Надеюсь, там всё ясно - это устанавливает путь к каталогу config как симлинк. Что бы вы сейчас ни изменили и сохранили конфигурацию, это будет в каталоге one
. Затем вы можете выйти и switch_mc two
, вернуться к старой конфигурации, затем снова запустить mc, внести изменения и сохранить их, и т.д.
Вам может сойти с рук удаление killall mc
и проигрывание; конфигурационный материал находится в файле ini
, который считывается при запуске (таким образом, вы не можете включить его "на лету"). Затем он не трогается до выхода, если вы не "Save setup", но при выходе может быть перезаписан, так что опасность здесь заключается в том, что вы удалите что-то, что вы сделали ранее или за пределами запущенного экземпляра.
Разбор таких структурированных данных лучше всего проводить с помощью специального парсера, так же, как и вы это делаете. Однако, в данном конкретном случае достаточно просто сделать:
$ grep -B 1 '"type":' Customer.json | tr $'"' $"'" | sed 's/[:,]//g' |
awk '{print "field(key: "$1",\tdisplayName: "$1",\t type: "$NF")"}' RS="--"
Который возвращает:
field(key: 'customerId', displayName: 'customerId', type: 'string')
field(key: 'name', displayName: 'name', type: 'string')
Предполагая, что у вас достаточно памяти для приостановки файла, вы можете попробовать
perl -e 'use List::Util 'shuffle'; @k=shuffle(<>); print @k[0..999]' file.bed
Поскольку вы хотите сделать это 10000 раз, я бы рекомендовал интегрировать повторение в сценарий и перетасовать индексы , а не сам массив для ускорения:
$ time perl -e 'use List::Util 'shuffle';
@l=<>; for $i (1..10000){
open(my $fh, ">","file.$i.bed");
@r=shuffle(0..$#l);
print $fh @l[@r[0..999]]
}' file.bed
real 1m12.444s
user 1m8.536s
sys 0m3.244s
Выше создано 10000 файлов по 1000 строк каждый из файла, который содержал 37000 строк (пример файла повторяется 1000 раз). Как видите, на мою систему ушло чуть больше трех минут.
используйте List:: Util 'shuffle';
: импортирует модуль Perl, предоставляющий функцию shuffle ()
, которая рандомизирует массив. @ l = < >;
: загрузите входной файл ( < >
) в массив @ l
. для $ i (1.. 10000) {}
: запустите этот 10000 раз. @ r = shuffle (0.. $ # l);
: $ # l
- количество элементов в @ l
, поэтому @ r
теперь является рандомизированным списком индексных номеров массива @ l
(строки входного файла). открыть (мои $ fh, «>», «файл. $ i.bed»);
: открыть файл с именем файл. $ i.bed
для записи. $ i
будет принимать значения от 1 до 10000. print $ fh @ l [@ r [0.. 999]]]
: возьмите первые индексы 1000 в перетасованном массиве и напечатайте соответствующие строки (элементы @ l
). Другой подход заключается в использовании shuf
( thanks @ frostschutz ):
$ time for i in {1..10000}; do shuf -n 1000 file.bed > file.$i.abed; done
real 1m9.743s
user 0m23.732s
sys 0m31.764s
-121--36529- Есть много способов сделать это, конечно, но почему вы хотите? Это то, что файл fstab
является для .
Некоторые идеи:
монтирование
). Мне кажется, что ошибка ясна: переменная «i» является последовательностью, поскольку цикл для
итерирует значение « клиента» dict/mapping. Это значение само по себе является dict/mapping и итерация над ним даст вам последовательность списка ключей (т.е. [«свойства»].
cat Customer.json | python -c 'import sys; import simplejson as json; \
print "\n".join( [i for i in json.loads( sys.stdin.read() )["customer"]["properties"] ] )'
даст вам
customerid
name
и следующее должно приблизить вас к вашей цели:
cat Customer.json | python -c 'import sys; import simplejson as json; \
print "\n".join( ["{} {}".format(k, v) for k,v in json.loads( sys.stdin.read() )["customer"]["properties"].iteritems() ] )'
что дает:
customerId {'index': 'not_analyzed', 'type': 'string'}
name {'index': 'not_analyzed', 'type': 'string'}
Оттуда я бы рекомендовал вам на самом деле сделать питона в сценарии. Необходимо решить, как перейти от последовательностей
к Последовательностям
и выполнить дополнительное форматирование. Мультилинер всегда более прост в отладке (случай доказан вашим вопросом) и ремонтопригоден, а также дает более значимые (номера строк) сообщения об ошибках.