ALT Linux Community general discussions
 help / color / mirror / Atom feed
From: Yura Kalinichenko <yuk@iceb.vinnitsa.com>
To: AltLinux Community Maillist <community@altlinux.ru>
Subject: Re: [Comm] Значение переменной в awk
Date: Tue, 14 Jun 2005 07:55:12 +0300
Message-ID: <1118724912.3030.24.camel@yuk.home.int> (raw)
In-Reply-To: <auto-000267923943@intranet.ru>

В Вто, 14/06/2005 в 10:27 +0700, php-coder пишет:
>     Подскажите пожалуйста, как подставить значение переменной в
>     awk-выражение.
> 
>     Есть следующая комманда:
> 
>     awk '{if(NR>30&&NR<47){if($1>10){$1++;print $0}else{print $0}}else{print $0}}' Translation.m
> 
>     Но мне нужно, чтобы условие в нем было не постоянным, как сейчас, а
>     чтобы вмечто 30 и 47 подставлялись числа.
> 
>     BEGIN=`awk '/set 3/{print NR+2}' Translation.m`
>     END=`awk '/set 4/{print NR-2}' Translation.m`
> 
>     А вот подставить не получается:
> 
>     [c0der@mycomp ~]$ awk '{if(`echo -n "NR>"$BEGIN"&&NR<"$END`){if($1>10){$1++;print $0}else{print
>     $0}}else{print $0}}' Translation.m 
>     awk: {if(`echo -n "NR>"$BEGIN"&&NR<"$END`){if($1>10){$1++;print
>     $0}else{print $0}}else{print $0}}
>     awk:     ^ invalid char '`' in expression
>     [c1der@mycomp ~]$

Почитайте что-нибудь по awk - а то слишком много ошибок на ровном месте.
На беглый первый взгляд:

1. Не используйте в качестве имен переменных идентификаторв BEGIN и END
- это зарезервированные слова.

2. При подстановке непозиционных переменных не надо перед их именами
писать знак $

3. Не надо вставлять в текст awk-программы команды shell - это
совершенно разные вещи.

3. Присвоение значения переменной выполняется просто с помощью оператора
присваивания:

- в командной строке - инициализация

awk '{printf "min=%d; max=%d\n",MIN,MAX}' MIN=30 MAX=47 file.ext

- в теле программы внутри блока BEGIN - инициализация 

awk 'BEGIN { MIN=30 ; MAX=47 } ; { printf "min=%d; max=%d\n",MIN,MAX}' file.ext

- в теле программы - динамическое изменение

awk 'BEGIN { MIN=30 ; MAX=47 } ; { printf "min=%d; max=%d\n",MIN,MAX ; MIN=MIN+1 ; MAX=MAX+1}' file.ext

-- 
Yura Kalinichenko




  reply	other threads:[~2005-06-14  4:55 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2005-06-14  3:27 php-coder
2005-06-14  4:55 ` Yura Kalinichenko [this message]
2005-06-14  5:21 ` Pavel Usischev

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1118724912.3030.24.camel@yuk.home.int \
    --to=yuk@iceb.vinnitsa.com \
    --cc=community@altlinux.ru \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link

ALT Linux Community general discussions

This inbox may be cloned and mirrored by anyone:

	git clone --mirror http://lore.altlinux.org/community/0 community/git/0.git

	# If you have public-inbox 1.1+ installed, you may
	# initialize and index your mirror using the following commands:
	public-inbox-init -V2 community community/ http://lore.altlinux.org/community \
		mandrake-russian@linuxteam.iplabs.ru community@lists.altlinux.org community@lists.altlinux.ru community@lists.altlinux.com
	public-inbox-index community

Example config snippet for mirrors.
Newsgroup available over NNTP:
	nntp://lore.altlinux.org/org.altlinux.lists.community


AGPL code for this site: git clone https://public-inbox.org/public-inbox.git