Sponsored Content
Top Forums Shell Programming and Scripting Does awk have parameter substitution? Post 302942841 by Don Cragun on Friday 1st of May 2015 05:38:59 PM
Old 05-01-2015
Quote:
Originally Posted by Michael Stora
Post 2, I recognised that it worked (the reason I thanked the post).
Post 3, the second example you reposted is applicable to my script but I failed to understand it.

It appears that I did not appreciate the difference between how AWK ? operates from the BASH conditionals based on std error I am used to.
Code:
 
$ echo | awk 'BEGIN { a=b?b:"Default"; print a }' # I expected this result
Default
 
$ echo | awk 'BEGIN { b=""; a=b?b:"Default"; print a }' # I did not expect this result
Default
 
$ echo | awk 'BEGIN { c="something"; a=b?b:"Default"; print a }' # expected
something
 
$ echo | awk 'BEGIN { b="0"; a=b?b:"Default"; print a }' # expected
0
mestora@MESTORA-MOBL1 ~
$ echo | awk 'BEGIN { b=0; a=b?b:"Default"; print a }' # was not sure what to think but this is useful.
Default

Mike

PS. Going back to thank post 3.
PPS. That example works for one part of my sciprt that does include truely null values. In another file I am working with, the column is never truely empty but it consists of double quoted emptyness, in which case I need to stick with the gsub.
PPS. I also was not aware that you could simultaneously do the assignement and test the assignment. I would have thought the required syntax was:
Code:
a= a=b? c : "Default"; #which also works

If you would just tell us the constraints under which you want to assign one of a group of values to a variable, we can probably help you construct a single command using one or more ternary expressions to get what you want. But just saying "I want to set a default value like bash does." doesn't really make sense. The awk utility doesn't have the concept of an "unset" scalar variable. (It does for elements of an array variable; but not for scalar variables.) And, in awk the empty string and the string "0" and the number 0 will be treated as identical in many awk expressions. But, if we know explicitly what you are trying to do we can differentiate between unset array elements, an empty string, and a 0 (although you can't differentiate a string 0 from a number 0 in awk). And, if you reference an array element (other than by using the in operator), you create that array element. For instance, if you split a line using:
Code:
n = split($0, a, ",")

and you want to set the variable v to "unset" if array[5] has not been set (i.e., split() returned a value less than 5), "empty" if a[5] is an empty string, "zero" if a[5] compares equal to 0 (such as with "0", "000", or "0.0"), and to the contents of a[5] for anything else you could use:
Code:
v = (5 in a) ? a[5] == "" ? "empty" : a[5] == 0 ? "zero" : a[5] : "unset"

The command:
Code:
b=""; a=b?b:"Default"

sets a to Default because the ternary operator evaluates the 1st expression (b in this case) and if that expression evaluates to TRUE returns the 2nd expression; otherwise it returns the 3rd expression. In awk a variable evaluates to TRUE if it is a non-zero string, a non-zero number, or a non-empty string; otherwise, it evaluates to FALSE.

Scalar variables in awk are never "unset" as in a shell variable that has never been set. In awk, every unset scalar variable has the value 0 if it is referenced as a numeric value and has the value empty string if referenced as a string.
 

10 More Discussions You Might Find Interesting

1. UNIX for Dummies Questions & Answers

awk variable substitution

for the command below, it looks for the 3rd field value matching "P" and printing it. awk '{if ($3 == "P") print}' file how would i express this if i use a loop to find more that 1 variable fro a list? this doesn't seem to work... cat list | while read n do awk '{if ($3 == "$n") print}'... (1 Reply)
Discussion started by: apalex
1 Replies

2. Shell Programming and Scripting

Filed substitution with awk

guys, I'm trying to 9k lines of the following: aaa aaa 1 1 1 to aaa aaa 1 01 1 Im pretty ignorant when it comes to subtituting fields using awk any help ? Tony (1 Reply)
Discussion started by: tony3101
1 Replies

3. Shell Programming and Scripting

AWK substitution

I need to copy field 2 to field 3 for only those records that have the 1st field equal to account e.g. file account|123|789|xxx|yyy|zzz|... account_group|444|555|xxx|yy|zz|.... account|456|901|aaa|bbb|ccc|..... after running awk script should look like account|123|123|xxx|yyy|zzz|...... (4 Replies)
Discussion started by: klut
4 Replies

4. Shell Programming and Scripting

help with awk substitution

Hi again. A have a CSV-file in the following format: 2008.09.01,15:17:42,9227096485,9233175320,CTC10,SMS,0901151742098314,Target_MSIS DN_is_blacklisted I want to have an awk command that will say: If the first 3 digits of $4 does not begin with 922 or 923, then make $8 say "Invalid... (3 Replies)
Discussion started by: daytripper1021
3 Replies

5. Shell Programming and Scripting

Substitution using awk/gawk

Hello, I have a file containing lines such as: (1 104 (16) (17) (18) (102))$ (1 105 (16) (17) (19:21) (102))$ I would like to extract the numbers, only by using awk (or gawk). I do not want to use "sed" as it is very slow. For now my solution consists in... (2 Replies)
Discussion started by: jolecanard
2 Replies

6. UNIX for Dummies Questions & Answers

Parameter substitution with alias

Hello, in my .bashrc I tried to setup some aliases. alias scp_cmd="scp -P 8888 $1 me@somehost:." is supposed to copy a local file to somehost via scp. However it seems that the command line substitution does not work here. However this works: alias lst="ls -l $1" The above scp command can... (1 Reply)
Discussion started by: strobotta
1 Replies

7. Shell Programming and Scripting

Substitution in AWK

I am trying to use AWK to replace dallinux02 to dallinux03 everywhere in the servers.txt file and move it over to "awk2". Here is my script "awk2.awk": gsub(/dallinux02/, "dallinux03"); print > "awk2" I am trying to run this using the following: $ awk -f awk2.awk... (3 Replies)
Discussion started by: ora_umair
3 Replies

8. Shell Programming and Scripting

Parameter substitution with##

Hi experts I want to use the parameter substitution in the bash with ## to get a=mfs1000 (not the "mfs" maybe other string and the length is not the same" I want to get 1000 any help? I don't know use which pattern I use echo ${a##*} It doesn't work Lei (5 Replies)
Discussion started by: yanglei_fage
5 Replies

9. Shell Programming and Scripting

awk substitution

Hi all, I need some help with substitution in awk. Is it possible to substitute field from awk output with string from file? For example: zcat /SMS/CDR/cdr_TC/callLogs*_*_2013092710*.gz | sed 's/:/;/g' | awk -F";" '{if($2==1 && $10~/389123456789/) print $36";"$37}' 2;19733248 I want... (6 Replies)
Discussion started by: vasil
6 Replies

10. Shell Programming and Scripting

Parameter substitution is not working with sed

I am trying add a prefix variable(string) to command output. sed parameter substitution is not working. - I have found some issues on my end of testing,, please delete this thread for now. (1 Reply)
Discussion started by: kchinnam
1 Replies
All times are GMT -4. The time now is 02:14 AM.
Unix & Linux Forums Content Copyright 1993-2022. All Rights Reserved.
Privacy Policy