Создание автомобильных номерных знаков

Consulte el siguiente ajuste:

xfconf-query -c xfwm4 -p /general/tile_on_move -s true

Esto le permite colocar mosaicos en la ventana arrastrándola al lugar apropiado (arriba -la esquina derecha es un mosaico de 1/4 allí, el borde derecho de la pantalla es un mosaico de 1/2 allí, etc.. ).

-3
20.06.2017, 09:07
4 ответа

Чтобы не использовать много памяти, используйте вложенные циклы.

for az1 in {A..Z}; do
    for az2 in {A..Z} _; do
        for az3 in {A..Z} _; do
            for d1 in {0..9}; do
                for d2 in {0..9}; do
                    printf "$az1$az2$az3-$d1$d2%i\n" {0..9}
                done
            done
        done
    done
done | sed 's/_*-0*/-/'

Я добавил символы подчеркивания для поддержки необязательных более коротких строк и удалил начальные нули, чтобы вы могли получить такие результаты, как A-1и AB-12, а также полный Формат ABC-123. (Проверьте историю изменений, чтобы узнать, как это отменить.)

0
28.01.2020, 05:18

С bash вы можете использовать расширение фигурной скобки:

echo {A..Z}{A..Z}{A..Z}-{000..999}

Но , внимание. Эта команда создаст список из 26^3*1000(17,5 млн) записей.

2
28.01.2020, 05:18

Как указывает хаос, для этого можно использовать расширение фигурной скобки. Не забывайте -в середине, чтобы сделать их действительными в соответствии с вашим форматом, хотя:

echo {A..Z}{A..Z}{A..Z}-{000..999}

Если вам нужна одна запись в строке, вы можете заключить ее в цикл for, например:

for i in {A..Z}{A..Z}{A..Z}-{000..999}
do
    echo "$i"
done

Вы можете записать их все в файл, добавив > /path/to/fileпосле done.

Если вы не хотите использовать цикл for, вы также можете использовать tr, чтобы он печатал по одной записи в строке:

echo {A..Z}{A..Z}{A..Z}-{000..999} | tr " " "\n"

Другой вариант — использовать printfдля печати в виде списка. Это сэкономит вам tr.

printf '%s\n' {A..Z}{A..Z}{A..Z}-{000..999}
3
28.01.2020, 05:18

Хотя обычно для создания списков, подобных этому, можно использовать раскрытие фигурных скобок, это может быть достаточно большим, чтобы вызвать проблемы. Несмотря на то, что это всего лишь ~17 миллионов слов, Bash 4.4 не удается построить список на виртуальной машине с 2 ГБ памяти, и происходит сбой через 1,5 минуты без каких-либо результатов.

Возможно, что-то вроде Perl было бы лучше:

perl -le 'foreach $i ("AAA".."ZZZ") { foreach $j ("000".."999") { print "$i-$j" }} ; ' > plates

Список создается примерно за 5 секунд.

Если вам нужно сделать это в Bash, разделите задание на более мелкие циклы.

Тем не менее, мне интересно, есть ли лучший способ сделать то, чего вы на самом деле пытаетесь достичь. Если имеющиеся у вас данные не включают все 17 миллионов возможных пластин, вам, вероятно, не нужно хранить их все. Если это так, вы можете использовать что-то другое, кроме оболочки (, то есть базу данных ).

0
28.01.2020, 05:18

Теги

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