LINUX.ORG.RU

Помгите написать awk однострочник


0

1

Хочу сделать сделать из этого:

NEW01
NEW010
NEW02

это:

new001
new002
new010

можно сделать башем, но я хочу разобраться с awk.

ls -1 |sort -g | awk -F'.' '{printf("mv \"%s\" \ ("%s /REF/ref)" "\n", $0, $NF)}'

Это пока не работает. Мне кажется что надо запихнуть в нуть sed, но я не могу понять как.

thx



cat test.txt:
NEW01
NEW010
NEW02

cat test.txt | awk '{match ($0, /^([^0-9]*)([0-9]+)$/, Arr); printf «%s%03d\n», Arr[1], Arr[2];}'
new001
new002
new010

Slavaz ★★★★★
()
Ответ на: комментарий от dreamer

ему бы ещё нуликами число в конце до 3-х знаков догнать...

Мой вариант тоже не идеален - не переводит в нижний регистр; я просто смухлевал и скопипастил результат у топикстартера ;)
Но мой вариант вместе с tr даст то, что надо. Ну или можно заюзать AWK-функцию tolower()... Наверное, оставим это ТС'у как домашнее задание. :)

Slavaz ★★★★★
()
Ответ на: комментарий от Slavaz

Так черт...

мне нужно там mv %original %desired.

Можешь по подробнее объяснить что делатют $0, /^([^0-9]*)([0-9]+)$/, Arr и «%s%03d\n», Arr[1], Arr[2];. Я целый день пытаюсь разобраться и не фига.

Andaril
() автор топика
Ответ на: комментарий от Slavaz

Нет! Но уже то что я понял как составить простейший односточник радует меня.

Andaril
() автор топика
Ответ на: комментарий от Andaril

>Теперь я понял что зря терял время

+100500. Я тоже жалею, что стал изучать sed не 22, а всего-лишь 2 года назад...

drBatty ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.