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


Login or Register for Dates, Times and to Reply

 
Thread Tools Search this Thread
# 1  
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 06:09 AM.. Reason: code tags, see PM!
# 2  
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  
Code:
awk -F, '$NF ~ /C$/ {print > "splitC.csv";next}1' inputfile > splitother.csv

This User Gave Thanks to elixir_sinari For This Post:
# 4  
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  
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  
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  
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 for Dates, Times and to Reply

Previous Thread | Next Thread
Thread Tools Search this Thread
Search this Thread:
Advanced Search

Test Your Knowledge in Computers #154
Difficulty: Easy
Inspur K-UX is a Linux distribution certified as UNIX 03 compliant.
True or False?

10 More Discussions You Might Find Interesting

1. 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

2. 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

3. UNIX for Dummies Questions & Answers

Condition check using awk

Hi, I have a file in the following format "SYLVESTER,WILLARD G"|"S00633600"|"221052958A"|"H2256"|"015"|""|"00000042BASJ"|"665303"|"N"|"20100211"|"380.4"|""|""|""|"5400"|"20110218"|""|"20110218"|"FEESC"|"D"|"F"|"P" "PURINGTON-KELLEY,C"|"S00808783"|"029424717A"|"H2256"|"024"|"MEMBER JOINED... (3 Replies)
Discussion started by: nua7
3 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