HELP with AWK one-liner. Need to employ an If condition inside AWK to check for array variable ?


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting HELP with AWK one-liner. Need to employ an If condition inside AWK to check for array variable ?
# 1  
Old 07-10-2012
Question HELP with AWK one-liner. Need to employ an If condition inside AWK to check for array variable ?

Hello experts,

I'm stuck with this script for three days now. Here's what i need.
I need to split a large delimited (,) file into 2 files based on the value present in the last field.
Samp: Something.csv
Code:
bca,adc,asdf,123,12C
bca,adc,asdf,123,13C
def,adc,asdf,123,12A

I need this split into 2 files with C records in file and the rest in another.
I'm using the below awk :
Code:
awk -F, '{if($NF=="12C"||$NF=="13C")print >"splitC.csv";else print >"slitA.csv"}' SOMTHING.csv

This works fine. But i have around 50(or more in the future) different values for C such as 12C, 13C, 18C, 19C, 26C, ... I don't want to hard-code these values with the "||" clause in the above if condition.
Is there a way i can store this in a variable array. or in a variable as a string and manage to check for this condition ??

I tried writing an AWK block, etc to manage this, but to no success.
Please help me on this.

Thanks Gurus!


Moderator's Comments:
Mod Comment Please use code tags next time for your code and data.

Last edited by zaxxon; 07-10-2012 at 05:09 AM.. Reason: code tags, see PM!
# 2  
Old 07-10-2012
why don't you use regular expressions? Something like
Code:
$NF ~ /.*C$/ { print > "splitC.csv" }

This User Gave Thanks to 116@434 For This Post:
# 3  
Old 07-10-2012
Code:
awk -F, '$NF ~ /C$/ {print > "splitC.csv";next}1' inputfile > splitother.csv

This User Gave Thanks to elixir_sinari For This Post:
# 4  
Old 07-10-2012
If the values where truly different:
Code:
awk -F, -v vA="12C,13C" 'BEGIN{split(vA,a,",");for (i in a){b[a[i]]++}}{fic= $NF in b ? "splitC.csv" : "splitB.csv" ; print $0>>fic}' infile.csv

This User Gave Thanks to Klashxx For This Post:
# 5  
Old 07-10-2012
Using the last character in each line...
Code:
$ cat Something.csv
bca,adc,asdf,123,12C
bca,adc,asdf,123,13C
def,adc,asdf,123,12A

$ awk '{print substr($0,length)}' Something.csv
C
C
A

$ awk '{print > "split" substr($0,length) ".csv"}' Something.csv

$ head split?.csv
==> splitA.csv <==
def,adc,asdf,123,12A

==> splitC.csv <==
bca,adc,asdf,123,12C
bca,adc,asdf,123,13C

$

This User Gave Thanks to Ygor For This Post:
# 6  
Old 07-10-2012
Splendid, Guys!
I'm going by Klsshxx's way. It works like a charm and fits my requirement like a glove.

116@434 and elixir_sinari's tips are also very helpful.

Thanks for the quick response!!
# 7  
Old 07-10-2012
Code:
[root@node2 ~]# sed -n '/C$/!p' infile
def,adc,asdf,123,12A
[root@node2 ~]# sed -n '/C$/p' infile
bca,adc,asdf,123,12C
bca,adc,asdf,123,13C

This User Gave Thanks to complex.invoke For This Post:
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. UNIX for Beginners Questions & Answers

Awk/bash one liner replacement for a if condition

Hi. I wrote this small bash script, i want to compare second column from file1 with file2 if a pattern matches. Files are small and I am sure that pattern occurs only once. I think this can be rewritten into a awk one liner. Appreciate if someone could give me idea. Whole NR FNR confuse me :o ... (6 Replies)
Discussion started by: ctrld
6 Replies

2. Shell Programming and Scripting

If else condition inside for loop of awk command in UNIX shell scripting

Hi , Please excuse me for opening a new thread i am unable to find out the syntax error in my if else condition inside for loop in awk command , my actual aim is to print formatted html td tag when if condition (True) having string as "failed", could anyone please advise what is the right... (2 Replies)
Discussion started by: karthikram
2 Replies

3. Shell Programming and Scripting

Passing awk variable argument to a script which is being called inside awk

consider the script below sh /opt/hqe/hqapi1-client-5.0.0/bin/hqapi.sh alert list --host=localhost --port=7443 --user=hqadmin --password=hqadmin --secure=true >/tmp/alerts.xml awk -F'' '{for(i=1;i<=NF;i++){ if($i=="Alert id") { if(id!="") if(dt!=""){ cmd="sh someScript.sh... (2 Replies)
Discussion started by: vivek d r
2 Replies

4. Shell Programming and Scripting

awk if one liner syntax for equating with a string variable

I would like to have help with syntax for using a string varaibles inside if and else in a awk one liner. Eg. I would like to say, list all the filenames that have been modified in a particular month(present in a string variable) or list all the filenames whose owner is $owns and owner group is... (3 Replies)
Discussion started by: Prev
3 Replies

5. Shell Programming and Scripting

Calling array inside awk

Hello I have the file df.tmp FS is actually the / FS but escape character\ and end of line $ is used in order to fetch exctly / and not other filesystems. awk '/\/$/ {print $(NF-1)+0}' df.tmp will work properly and return a value eg. 60 but when I am trying to issue the command with the array... (3 Replies)
Discussion started by: drbiloukos
3 Replies

6. Shell Programming and Scripting

Modifying awk code to be inside condition

I have the following awk script and I want to change it to be inside a condition for the file extension. ################################################################################ # abs: Returns the absolute value of a number function abs(val) { return val > 0 ? val \ ... (4 Replies)
Discussion started by: kristinu
4 Replies

7. Shell Programming and Scripting

matching patterns inside a condition in awk

I have the following in an awk script. I want to do them on condition that: fext == "xt" FNR == NR { />/ && idx = ++i $2 || val = $1 next } FNR in idx { v = val] } { !/>/ && srdist = abs($1 - v) } />/ || NF == 2 && srdist < dsrmx {... (1 Reply)
Discussion started by: kristinu
1 Replies

8. Shell Programming and Scripting

AWK help. how to compare a variable with a data array in AWK?

Hi all, i have a data array as follows. array=ertfgj2345 array=456ttygkd . . . array=errdjt3235 so number or elements in the array can varies depending on how big the data input is. now i have a variable, and it is $1 (there are $2, $3 and so on, i am only interested in $1). ... (9 Replies)
Discussion started by: usustarr
9 Replies

9. Shell Programming and Scripting

awk - array elements as condition

Hi, can I use array elements ( all ) in conditional statements? the problem is ,the total number of elements is not known. e.g A is an array with elements - 1,2,3 now if i want to test if the 1 st field of input record is either 1,2 or 3, i can do something like this if ( $1 ~... (1 Reply)
Discussion started by: shellwell
1 Replies

10. Shell Programming and Scripting

using array inside awk

Hi All, I have the following code sequence for reading some bulk file and moving the content to two different arrays. while read data do THREEG_PATTERN=`echo $data | egrep "3G"` if then NEW_THREEG_PATTERN=`echo $THREEG_PATTERN | cut -d " " -f2` ... (12 Replies)
Discussion started by: subin_bala
12 Replies
Login or Register to Ask a Question