LinuxForum.Fans
Тема

AWK или SED - внешняя переменная

Автор: mirinda 11 сообщений 3462 просмотров
04.10.2014 11:17 · отредактировано #394974

День добрый.

Есть скрипт

text

#!/bin/bash
test=kuku
ls -al | awk '{ printf "%-10s\n", $1 }'
exit 0

Никак не найду, можно ли при печати первого столбца вначале строк выводить текст переменной $test? А также чтобы 1 столбец выводил данные обрезая их до длины скажем в 2 символа? Может в sed как то можно сделать?
Покапался в инете...как здесь приведено в примере по идее должно печатать 1 первый столбец длиной 10 символов...потом новая строка
Делал printf "%-2s\n", $1 - первое поле все равно печатет не обрезаясь до 2 символов.
Не совсем догоняю в регулярных этих выражениях.
И что значит в кавычках символ процента...символ тире...буква s?
Не просветите? Или хотя бы ссылку , где подробно все эти знаки объясняются в регулярных выражениях?
Спасибо.

04.10.2014 11:43 #394977
"mirinda" написал:
Никак не найду, можно ли при печати первого столбца вначале строк выводить текст переменной $test?
нет и быть не может. Это три разных языка программирования. Bash/Sed/AWK. Это вам не html+php.

Но можно вот так:
[console]$ X="a b c"; echo |sed 's/^/'"$X"'/'
a b c
[/console]

"mirinda" написал:
А также чтобы 1 столбец выводил данные обрезая их до длины скажем в 2 символа?

[console]$ echo "abcdefg" |sed -r 's/^(..).*/\1/'
ab
[/console]

"mirinda" написал:
И что значит в кавычках символ процента...символ тире...буква s?
Не просветите? Или хотя бы ссылку , где подробно все эти знаки объясняются в регулярных выражениях?

про sed могу свою книжку посоветовать.

04.10.2014 11:50 · отредактировано #394978

А..спасибо...через sed тогда поковыряюсь. ))

А книгa ваша...это в инете где то выложена? Или у вас "маленький свечной заводик" по продаже? :-)

04.10.2014 14:02 #394981

Вообще awk можно передать значение внешней для него переменной.
Например, если в скрипте есть переменная var, то в awk её значение можно присвоить
его переменной с помощью конструкции "-v v1=$var" и дальше обращаться к этой
переменной как обычно, $v1.

Пётр.

04.10.2014 14:45 #394984

Хм...я так пробовал на днях..что то не получилось

Скажем если в командной строке писать

text
ls -al | awk -v v1=ok '{print $1,$v1}'

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

04.10.2014 14:55 #394985

А меня получался именно тот, какого я ожидал, причём это прямо копия
строки из моего скрипта, только у меня была именно определённая в скрипте
переменная. И что это за "ok" в выводе ls?

Пётр.

04.10.2014 16:51 #394991
mirinda написал:

ls -al | awk -v v1=ok '{print $1,$v1}'

Ошибка в синтаксисе. Нужно

text

ls -al | awk -v v1=ok '{print $1 v1}'
04.10.2014 19:29 #395006
"mirinda" написал:
А книгa ваша...это в инете где то выложена?

учебник о sed

"mirinda" написал:
Делал  printf "%-2s\n", $1 - первое поле все равно печатет не обрезаясь до 2 символов.

через точку пишется: printf "%.2s\n"

04.10.2014 21:21 #395014

"mirinda" написал:
А книгa ваша...это в инете где то выложена? Или у вас "маленький свечной заводик" по продаже? :-)
вы меня с "кю" не мешайте.
всё выложено под GFDL
вот ссылка на github'е http://emulek.github.io/sed/
ну и вот ссылка на мой локалхост, а то иные почему-то думают, что я не осилил: http://emulek.ignorelist.com/sed/
04.10.2014 21:24 #395015

"Peter" написал:
его переменной с помощью конструкции "-v v1=$var"
да, точно. Про этот вариант я как-то и позабыл, каюсь.
07.10.2014 10:06 #395288

Всем спасибо. :-)

Войдите или зарегистрируйтесь, чтобы ответить.