Как мне составить список букв от А до Я и перебирать их в оболочке? - PullRequest
4 голосов
/ 22 сентября 2009

Скажем, я хочу перейти от буквы А к букве Z в оболочке csh. Как я могу сделать это кратко?

В bash я бы сделал что-то вроде

for i in 'A B C ...Z'; do echo $i; done

Дело в том, что я не хочу писать от A до Z, я хочу что-то вроде

[A-Z]

Можете ли вы предложить предложение в одну строку в AWK или Perl?

Ответы [ 7 ]

6 голосов
/ 22 сентября 2009
perl -e 'print for "a" .. "z", "A" .. "Z", 0 .. 9'
4 голосов
/ 22 сентября 2009

Perl

$,=" ";print +(A..Z)

или использовать внутри оболочки:

for i in `perl -e '$,=" ";print +(A..Z)'` ; do echo $i ; done
3 голосов
/ 07 октября 2009

Надеюсь, у вас установлен Ruby. ;) Посмотрите на эту простую командную строку из оболочки:

  1. , используя Ruby для итерации от А до Я и попросить напечатать буквы:

    $ ruby -e ' "a".upto("z") {|letter| print letter}; print "\n"'
    
  2. итерация от A до Z и подставка значения, полученного во время текущей итерации, в строку, затем вывод строки:

    $ ruby -e ' "a".upto("z") {|letter| puts "mkdir #{letter}"}'
    
    mkdir a
    mkdir b
    mkdir c
    mkdir d
    ...
    mkdir z
    
  3. использовать выходные данные итерации от A до C в качестве аргумента для mkdir, чтобы создать 3 каталога:

    $ mkdir $(ruby -e ' "a".upto("c") {|letter| puts "#{letter}"}')
    

    сделать список, чтобы увидеть результаты:

    $ ls -al
    drwxr-xr-x  2 iuliu users  4096 2009-10-07 00:09 a
    drwxr-xr-x  2 iuliu users  4096 2009-10-07 00:09 b
    drwxr-xr-x  2 iuliu users  4096 2009-10-07 00:09 c
    

Надеюсь, это немного поможет! ;)

С уважением, Iuliu

1 голос
/ 28 ноября 2009

ни у кого нет решения gawk, поэтому вот один

awk 'BEGIN{for(i=65;i<=90;i++) printf "%c", i}'
0 голосов
/ 13 сентября 2016

ИСПОЛЬЗУЯ AWK:

Вы можете обратиться к набору символов ASCII, используя следующую ссылку:

http://ee.hawaii.edu/~tep/EE160/Book/chap4/subsection2.1.1.1.html

Теперь, чтобы перебрать любой набор значений, вы можете использовать команду AWK следующим образом:

awk 'BEGIN {for (i = 97; i <123; i ++) {printf "% c", i}; printf "\ n";} '</p>

Результат: а б в г д е ж х и ч к л м н о п р р с т у ф х ц ч ш 101 ез

Здесь 97 соответствует букве «а», а 122 - «z». Вы можете изменить результат, используя любое значение из списка, приведенного выше.

  • 65 до 90 для A до Z
  • 48 до 57 для 0 до 9
  • 97 до 122 для а до z

и т. Д.

0 голосов
/ 23 сентября 2009

Как насчет:

for i in $(perl -e 'for my $i ("a".."z") { print "$i "; }'); do ...; done

... или я неправильно понимаю, чего вы пытаетесь достичь?

(Предположительно, предложение с использованием $,=" " даже лучше, чем явный цикл Perl for). Тем не менее, я не понимаю значение переноса диапазона в +() пунктуации. Это работает для меня, если я просто использую: print A..Z; ... хотя perl -we 'print a..z;' gives me a warning about unquoted strings, but the uppercase version doesn't. The statement print + (a..z) gives exactly the same warning ... and quoting any of these eliminates the warning. So what's the intent of the + (...) `? Это просто пытается втиснуть это в контекст списка?)

0 голосов
/ 22 сентября 2009
foreach i (`jot -c 26 65`)
    echo $i
end
...