Цикл по файлам с определенными совпадающими числами

Быстрое чтение urxvt (1) , а затем синопсис упомянутого urxvt (7) показывает, что терминалы rxvt-unicode поддерживают escape-последовательности, которые могут изменяться, например шрифт:

SYNOPSIS
          # set a new font set
          printf '\33]50;%s\007' 9x15,xft:Kochi" Mincho"

Их нужно будет распечатать на каждом открытом терминале, и, вероятно, потребуется некоторый перевод, чтобы преобразовать формат .Xdefaults во что-то подходящее для такой печати.

1
21.03.2019, 01:32
2 ответа

Использование bash

Попробуйте:

Start=1923
Stop=2267
MyVar=
for ((i=Start/100; i<=Stop/100; i++)); do 
    MyVar="$MyVar;/path/to/files$i"
done
MyVar=${MyVar:1}
echo "$MyVar"

Приведенный выше оператор echoдает:

/path/to/files19;/path/to/files20;/path/to/files21;/path/to/files22

Как это работает:

  • MyVar=

    Это гарантирует, что переменная MyVarпуста.

  • for ((i=Start/100; i<=Stop/100; i++)); do

    Это запускает цикл по переменной i.

  • MyVar="$MyVar;/path/to/files$i"

    Это добавляет строку к MyVarкаждый раз при запуске цикла.

  • done

    Это сигнализирует об окончании цикла.

  • MyVar=${MyVar:1}

    Это удаляет нежелательную точку с запятой в начале строки.

  • echo "$MyVar"

    Отображает результат.

Использование awk

Используя очень похожую логику:

MyVar=$(awk -v Start=1923 -v Stop=2267 'BEGIN{for (i=int(Start/100);i<=int(Stop/100);i++) MyVar=MyVar";/path/to/files" i; print substr(MyVar,2)}')
echo "$MyVar"

Приведенный выше оператор echoдает:

/path/to/files19;/path/to/files20;/path/to/files21;/path/to/files22
0
28.01.2020, 00:18

Это похоже на задание для Brace Expansion, плюс немного eval над строковыми манипуляциями:

MyVariable=$(eval "printf '%s' /path/to/files{${Start:0:2}..${Stop:0:2}}\;")

Затем вы можете избавиться от последнего двоеточия semi -с помощью${MyVariable%;}

В приведенном выше примере я предполагаю, что ваши ${Start}и ${Stop}действительно всегда являются как минимум 3-значным числом, иначе вам нужно будет настроить манипуляции со строками.

0
28.01.2020, 00:18

Теги

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