Visit Our UNIX and Linux User Community

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

I need this split into 2 files with C records in file and the rest in another.
I'm using the below awk :
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
$NF ~ /.*C$/ { print > "splitC.csv" }

This User Gave Thanks to 116@434 For This Post:
# 3  
Old 07-10-2012
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:
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...
$ cat Something.csv

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

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

$ head split?.csv
==> splitA.csv <==

==> splitC.csv <==


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
[root@node2 ~]# sed -n '/C$/!p' infile
[root@node2 ~]# sed -n '/C$/p' infile

This User Gave Thanks to complex.invoke For This Post:

Previous Thread | Next Thread
Test Your Knowledge in Computers #451
Difficulty: Easy
In a 2012 online poll at Lifehacker, Linux Mint was voted the second best Linux distribution, after Ubuntu.
True or False?

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/ 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 (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

Featured Tech Videos