bug-gawk
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Gawk: example of complex usage of option -v


From: Youni Git
Subject: Gawk: example of complex usage of option -v
Date: Thu, 08 Dec 2022 18:14:01 +0000
User-agent: Zoho Mail

Hello, Arnold Robbins! Thank you for Gawk manual, I like to read it and use 
every example. I have a request to improve the manual of gawk. In last version 
of October, 2022, there is an explanation of command line option "-v":-v 
var=val --assign var=val Set the variable var to the value val before execution 
of the program begins.Such variable values are available inside the BEGIN rule 
(see Section 2.3 [Other Command-Line Arguments], page 38).The -v option can 
only set one variable, but it can be used more than once, setting another 
variable each time, like this: ‘awk -v foo=1 -v bar=2 ...’.CAUTION: Using -v to 
set the values of the built-in variables may lead to surprising results. awk 
will reset the values of those variables as it needs to, possibly ignoring any 
initial value you may have given.I tested, and got extremely another result, I 
hope this will be explained somehow in next versions of manual.1. There is a 
difference, where exactly in command line option -v appears. If program text or 
file appears before definition of variable, this variable will have no value in 
BEGIN rule. Awk reads the command line like a code and runs it as a sequence of 
commands and data. This is fundamental.2. Variable can vary for every file 
used, when another value is placed before another file. Awk reads and set the 
new value of variable if provided before processing of file defined after new 
variable.Example:$ echo text1 > file1$ echo text2 > file2$ echo 'BEGIN {print 
"at the beginning myvar is " myvar}; {print "myvar is " myvar, ", text is " 
$0}; END {print "in the end myvar is " myvar};' > program.awk$ awk -f 
program.awk myvar=kuku file1 myvar=auau file2at the beginning myvar ismyvar is 
kuku , text is text1myvar is auau , text is text2in the end myvar is auauAwk 
reads, uses and process the command line arguments in a sequence as like it is 
a code. Awk runs the program file program.awk before variable myvar is set, 
because actually variable is provided after program file is provided in command 
line. Myvar is not set before running the code in BEGIN rule.And myvar is 
changing after file1 was processed. In section END myvar has its last value.I 
hope such example will be useful and will save time of programmers reading 
manual and writing first awk programs with variables. I think it is fundamental 
feature to set variable before processing of each file, and it must be 
considered in the manual.  $ awk -VGNU Awk 5.1.0, API: 3.0 (GNU MPFR 4.1.0, GNU 
MP 6.2.0)Copyright (C) 1989, 1991-2020 Free Software Foundation.Thank you for 
deep work of explanation of awk features.Best regards.Youni.


reply via email to

[Prev in Thread] Current Thread [Next in Thread]