case command inside awk/nawk


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting case command inside awk/nawk
# 1  
Old 12-13-2007
case command inside awk/nawk

well I found lot of topics about awk..about if command in awk..

but I had to implement this:

nawk -F"|" '
$47 ~ /0R0011/ { print > ("/home/user/M/MC.tmp" )}
$47 ~ /0R0012/ { print > ("/home/user/M/DuSI.tmp" )}
$47 ~ /0R0014/ { print > ("/home/user/M/FF.tmp" )}
$47 ~ /0R0018/ { print > ("/home/user/M/Cg.tmp" )}
$47 ~ /0R0010/ { print > ("/home/user/M/M1.tmp" )} ' File0


basicly I did it with if command

nawk -F "|" '
{
if ($47=="0R0011")
{
print $0 ; }
} ' File0 > MC.tmp

but for one case only ..is there some kind of case/switch command inside awk/nawk..??

thanks a lot
# 2  
Old 12-13-2007
no, there's not. but you can emulate it.
gawk 3.1.3+ does support switch/case though.

Last edited by vgersh99; 12-13-2007 at 09:44 AM..
# 3  
Old 12-13-2007
Edit: Just saw you use ~ and not == so the solution I posted won't work ...

You could write something like this (for consecutive numeric values you
can use split to avoid assigning explicitly the array indexes/elements)

Code:
awk 'NR == 1 {
	p = "0R00"
	h = "/home/user/M/"
	e = ".tmp"
	u[p 10] = "M1"
	u[p 11] = "MC"
	u[p 12] = "DuSI"
	u[p 14] = "FF"
	u[p 18] = "Cg"
}
$47 in u {
	print > (h u[$47] e)
}' FS="|" data

Or you can try to build your GNU Awk (>= gawk 3.1.3)
with the --enable-switch option (just found it and I've never used it)
and try the switch statement:

Quote:
switch (expression ) {
case value or regular expression :
case-body
default:
default-body
}

Last edited by radoulov; 12-13-2007 at 09:55 AM..
# 4  
Old 12-13-2007
that is what I thought...there is no case or switch statement inside awk/nawk...

any suggestion how can I emulate it..or how can I do it without case/switch with supported statements
# 5  
Old 12-13-2007
Quote:
Originally Posted by abdulaziz
that is what I thought...there is no case or switch statement inside awk/nawk...

any suggestion how can I emulate it..or how can I do it without case/switch with supported statements
You already did it, no?
You want to type less? Smilie


Code:
nawk -F"|" '
$47 ~ /0R0011/ { print > ("/home/user/M/MC.tmp" )}
$47 ~ /0R0012/ { print > ("/home/user/M/DuSI.tmp" )}
$47 ~ /0R0014/ { print > ("/home/user/M/FF.tmp" )}
$47 ~ /0R0018/ { print > ("/home/user/M/Cg.tmp" )}
$47 ~ /0R0010/ { print > ("/home/user/M/M1.tmp" )} ' File0

# 6  
Old 12-13-2007
well yes I did it but when I look at it I just know that there is more elegant way...Smilie


but anyways thanks for answer that there is no case in awk..I thought that is must be becouse "if else" statement is supported..

i also tryed with

if () {

..}
else
{ if () {
..}
else {..}
}

but this is not working as well..
sorry for beeng boring..but I am courious..Smilie
# 7  
Old 12-13-2007
Quote:
Originally Posted by abdulaziz
well yes I did it but when I look at it I just know that there is more elegant way...Smilie


but anyways thanks for answer that there is no case in awk..I thought that is must be becouse "if else" statement is supported..
No, it's got nothing to do with 'if/else'. Other (most) languages support both, but not awk.
Once again, radoulov's shown one (elegant) way of emulating switch/case for your particular tasks - you might find it useful to adopt.
Quote:
Originally Posted by abdulaziz
i also tryed with

if () {

..}
else
{ if () {
..}
else {..}
}

but this is not working as well..
sorry for beeng boring..but I am courious..Smilie
not sure if it's the entire script, but it seems like you have an unbalanced '}'. What exactly 'not working'?
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. UNIX for Beginners Questions & Answers

How to avoid arguments inside Nawk command?

Hi, Here is my command print $2 was meant to select the second column however, it is getting substituted with the second argument that was passed to the script. Can you please tell me how can I resolve this ? (6 Replies)
Discussion started by: mohtashims
6 Replies

2. Shell Programming and Scripting

Substitute variable inside nawk

Hi, I need to set "prd" in the below command to a unix variable nawk '/^#/ {next} FNR==NR {prd;next} !($0 in prd)' So, this is what i did fname=prd // unix shell variable nawk -v fname=$fname '/^#/ {next} FNR==NR {fname;next} !($0 in fname)'But the value of fname i.e "prd" is not... (8 Replies)
Discussion started by: mohtashims
8 Replies

3. Shell Programming and Scripting

Multiple command execution inside awk command during xml parsing

below is the output xml string from some other command and i will be parsing it using awk cat /tmp/alerts.xml <Alert id="10102" name="APP-DS-ds_ha-140018-componentFailure-S" alertDefinitionId="13982" resourceId="11427" ctime="1359453507621" fixed="false" reason="If Event/Log Level(ANY) and... (2 Replies)
Discussion started by: vivek d r
2 Replies

4. Shell Programming and Scripting

Nested case inside awk

please let me know if the below code could be written efficiently inside single awk case "$INP" in ksh) cat catalog | awk 'BEGIN {FS=",";} { print $2 } END {}' ;; pset) cat catalog | awk 'BEGIN {FS=",";} { print $3 } END {}' ;; dml) cat catalog | awk 'BEGIN {FS=",";} {... (2 Replies)
Discussion started by: cvsanthosh
2 Replies

5. Shell Programming and Scripting

Reading input record from inside nawk

Hi friends, I have small query with reg to awk search pattern.. below is my sample file and code which i tried.. $ cat file.txt xxx,yyyyy,messageID,sha xxxx,errorcode,messageID,name in the above sample file - let assume I know the errorcode(2nd record) using which I want to... (2 Replies)
Discussion started by: Shahul
2 Replies

6. Shell Programming and Scripting

problem in nawk : case insensitive pattern matching

HI, My file contains data something like 034500,5,B5004946544EB185,DEFAULT,0 Now i want to do a pettern match for DEFAULT and remove that particular line from file and transfer the rest contents to temp file.But my req is i want to do case insensitive matching ie DEFAULT / default. I... (4 Replies)
Discussion started by: centurion_13
4 Replies

7. Shell Programming and Scripting

How to use same variable value inside as well as outside of the awk command?

Hi Jim, The following script is in working state. But i m having one more problem with awk cmd. Could you tell me how to use any variable inside awk or how to take any variable value outside awk. My problem is i want to maintain one property file in which i am declaring variable value into that... (12 Replies)
Discussion started by: Ganesh Khandare
12 Replies

8. Shell Programming and Scripting

using cp command inside nawk

Hello I have facing issue while using cp command inside nawk block. #!/bin/ksh my_name=$1 nawk -v my_name1=$my_name 'BEGIN { n = split(my_name1,names,":"); for (i=1;i<=n;i++) { print names; cpcmd = "cp " /tmp/test.txt" " ./sample system(cpcmd) } exit }' exit 0 i'am getting... (1 Reply)
Discussion started by: piscean_n
1 Replies

9. Shell Programming and Scripting

How to specify 'not case sensitive' in regex (nawk, sed, patern expencions)?

Is it possible to make the search in regular exprecion or in matching parts of sed, nawk and others to IGNORE the case of the search string? I mean, like if used 'grep' with -i option: > grep -i "abc" file I would like to be able to do the same, say, by nawk: > nawk '/abc/ {print $0}'... (4 Replies)
Discussion started by: alex_5161
4 Replies

10. Shell Programming and Scripting

how to access values of awk/nawk variables outside the awk/nawk block?

i'm new to shell scripting and have a problem please help me in the script i have a nawk block which has a variable count nawk{ . . . count=count+1 print count } now i want to access the value of the count variable outside the awk block,like.. s=`expr count / m` (m is... (5 Replies)
Discussion started by: saniya
5 Replies
Login or Register to Ask a Question