LINUX.ORG.RU

Немогу разобратся с gawk


0

0

Немогу использовать гавк в гавке :(

# gawk 'BEGIN {system("ls -la| grep default")}'
-rw-r--r-- 1 root root 4503 Aug 21 06:36 default

# ls -la| gawk '{print $1}'
total
drwx------
[.........]

# gawk 'BEGIN {system("ls -la| gawk '{print $1}'")}'
gawk: BEGIN {system("ls -la| gawk {print
gawk: ^ unterminated string

Что я неправильно пишу ? Почему грип нормально работает, а гавк - нет ?

Зарание спасибо.

anonymous

> Что я неправильно пишу ? Почему грип нормально работает, а гавк - нет
Патамушта :) На самом деле понятно, почему это происходит - шэлл лезет внутрь гавковой программы и пытается чего-то делать с ' и ".
Самый простой выход - записать команды
---------
BEGIN {system("ls -la| gawk '{print $1}'")}
---------
в файл и запускать gawk -f <file>

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

> А какой-же непростой скособ ?
Вовсе не подразумевается наличие такового :) Мои эксперименты с ', " и \ ничего хорошего не дали.

phoenix ★★★★
()

"Это же элементарно, Ватсон!" (C):
gawk 'BEGIN {system("ls -la| gawk '\''{print $1}'\''")}'

P.S. не сиди по рутом.

unDEFER ★★★★★
()

Накой такие извраты?

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

>gawk 'BEGIN {system("ls -la| gawk '\''{print $1}'\''")}'

А теперь если можно объясните что делают эти козябли: '\'

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

Легко!
В вашем случае, первый апостроф открывает "цитирование", а второй как бы вам не хотелось, чтобы он тоже был "процитирован", закрывает "цитату", далее третий апостроф снова открывает "цитирование", а четвёртый его закрывает.
При этом средние апострофы gawk'у не передаются вовсе, а в выражении "{print $1}" $1 заменяется соответсвующим параметром оболочки.

Чтобы там корректно вставить апострофы можно либо между вторым и третьим апострофом написать:
\''{print $1}'\'
что я и сделал:
\' -- это передача ' в параметр.
А '{print $1}' -- так же работает цитированием.

Так же можно написать
gawk 'BEGIN {system("ls -la| gawk \"{print \\$1}\"")}'
или
gawk 'BEGIN {system("ls -la| gawk '"'{print \$1}'"'")}'

Если хотите как следует с этим разобраться то "поиграйтесь" с комадами
$ echo "'abc'"
$ echo 'a"b"c'
$ echo 'a'"b"'c'
$ echo 'a'"'b'"'c'

Ну и так далее в том же духе..

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

Ойййй....теперь все понятно !!!

ОГРОМНЕЙШЕЕ ВАМ СПАСИБО !

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