awk conditional output


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting awk conditional output
# 8  
Old 01-10-2015
I had been working with senhia83's suggestion:

Code:
awk -v c=0 '{ if ($4!=b){c=c+1;b=$4} $4="Text"c  }1' tmp

As I'm not very good with awk syntax, I had been trying to equate this conditional to what I need, namely (If $4 of datafile = "AS", then $4 of the output file = "The first string". And if $4 of datafile = "AOD", then $4 of the output file = "The second string"). While I see the $4="Text"c as the consequent, I was unable to see how to insert AS or AOD into the antecedent given this syntax.

My apologies again for my lack of clarity. I'll do my best to keep searching for a solution.
# 9  
Old 01-10-2015
Only works if you have only AS and AOD in col4...

Code:
 
 $ cat tmp
 9780020080954 9.95 0.49 AS 23.3729
 9780020130857 9.95 0.49 AS 23.3729
 9780023001406 22.20 0.25 AOD 42.4725
 9780023008207 72.40 0.25 AOD 104.595
 9780023012617 74.80 0.25 AOD 107.565
  
 $ awk '{ $4=="AS"? $4="Text1":$4="Text2";}1' OFS="\t" tmp
 9780020080954 9.95 0.49 Text1 23.3729
 9780020130857 9.95 0.49 Text1 23.3729
 9780023001406 22.20 0.25 Text2 42.4725
 9780023008207 72.40 0.25 Text2 104.595
 9780023012617 74.80 0.25 Text2 107.565

This User Gave Thanks to senhia83 For This Post:
# 10  
Old 01-10-2015
Quote:
Originally Posted by palex
I am confusing everyone... my sincere apologies.
Basically, the string in column #4 is always AS or AOD.

If it is AS, I basically need to write several fields of that line, with one of the fields being "A string of text".

If it is AOD, I basically need to write several fields of that line, with one of the fields being "A different string of text".

I hope that clarifies... sorry again!
You mention changing "several fields". Maybe you could share an example of what that line would look like after the changes?.
# 11  
Old 01-10-2015
Quote:
Originally Posted by palex
I had been working with senhia83's suggestion:

Code:
awk -v c=0 '{ if ($4!=b){c=c+1;b=$4} $4="Text"c  }1' tmp

As I'm not very good with awk syntax, I had been trying to equate this conditional to what I need, namely (If $4 of datafile = "AS", then $4 of the output file = "The first string". And if $4 of datafile = "AOD", then $4 of the output file = "The second string"). While I see the $4="Text"c as the consequent, I was unable to see how to insert AS or AOD into the antecedent given this syntax.

My apologies again for my lack of clarity. I'll do my best to keep searching for a solution.
If senhia83's suggestion doesn't work for you, the following might provide a workable template for you script. You implied that you want some subset of the input fields to be printed in one case and another subset of the input fields in the other case. You gave no indication of what, if anything, should be printed if field 4 doesn't match either of your two specified values:
Code:
awk '
$4 == "A5" {
        print $1, $2, $3, "The first string", $10, $6
        next
}
$4 == "AOD" {
        print $1, $10, $6, "The second string", $2, $15
        next
}
{       print $0, "Not A5 and not AOD"
}' input_file...

# 12  
Old 01-10-2015
senhia83's latest suggestion worked perfectly. Thank you again, everyone.
# 13  
Old 01-10-2015
That should be reduced a little to:
Code:
awk '{$4=($4=="AS")?"Text1":"Text2"}1' OFS="\t" file

Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Multi-conditional IF - awk

I have a 6 column array with 2 million rows that looks like this: 1 1089699 rs6686003 G A g 1 1090557 rs7553429 A C c 1 1094738 rs4970362 A G a 1 1099342 rs9660710 A C c 1 1106473 rs4970420 G A a 1 1108637 rs4970421 G A g 1 1119858 rs1320565 C T c 1... (5 Replies)
Discussion started by: Geneanalyst
5 Replies

2. Shell Programming and Scripting

Sending sql output to email body with conditional subject line

hi , i have written below piece of code to meet the requirement but i am stuck in the logic here. the requirement are: 1) to send the sql out put to email body with proper formatting. 2) if count_matching = Yes then mail should triggered with the subject line ... (10 Replies)
Discussion started by: itzkashi
10 Replies

3. Shell Programming and Scripting

Conditional output redirection

Hi there, I'm in a coding mood! I've come through many ways of conditionally redirect the output of a script like: ] || exec &> /dev/nullBut my goal is slightly different. I would like to conditionally redirect the output of a command depending on the status of the command itself: if !... (6 Replies)
Discussion started by: chebarbudo
6 Replies

4. Shell Programming and Scripting

awk - read from a file and write conditional output

I have a file, which has '|' as separator; I need to read each line from that file and produce output to another file. While reading, I have certain condition on few specific columns (like column3 ='good'); only those lines will be processed. (3 Replies)
Discussion started by: mady135
3 Replies

5. Shell Programming and Scripting

Help with conditional clauses for script output

Hello. I am new this site as well as new to shell scripting and this is my first form... Please help me with the following shell script. I am executing a shell script to run every 15 min (scheduled in cronjob) and it gives an output in an output file which is e-mailed. CONCCOUNT=`cat... (1 Reply)
Discussion started by: Jamessteevens
1 Replies

6. Shell Programming and Scripting

Conditional awk

Hello All, I have a file like this: bash-3.00$ cat 1.txt 201112091147|0|1359331220|1025 201112091147|0|1359331088|1024 201112091144|0|1359331172|1025 201112091147|0|1359331220|1021 201112091149|0|1359331088|1027 201112091144|0|1359331172|1029 and a list of MSISDNs in another file... (9 Replies)
Discussion started by: EAGL€
9 Replies

7. Shell Programming and Scripting

awk conditional find

Hi, I have a file in the following format: aabbba 25.31806899 baaabb 38.21808852 cccccu 1.31819523 552258121.31818253 ffddybb 5.41815555 almcamc87561812689 223aqas5.661828345 adacaaaaaaa1821285 adacaaaaaaa1821286 smckaa 3.81828756 ada2512510c1821287 ada2522511c1821328... (4 Replies)
Discussion started by: alex2005
4 Replies

8. Shell Programming and Scripting

AWK conditional addition

I have a column of numbers $2, I would like to add 360 to all numbers that are negative. This method seems a bit convoluted, and does not work (outputs 0): BEGIN { A=sprintf("%d", $2); if(A<0) A=A+360; BIN++; } END { for(A in BIN) print... (5 Replies)
Discussion started by: chrisjorg
5 Replies

9. Shell Programming and Scripting

Awk Conditional

Hi Guys, i have this files: xyz20080716.log opqrs20080716.log abcdef20080716.log xyz20080717.log oprs20080717.log abcde20080717.log currentdate: 20080717.log I want to make script to zip the file for past day. Can anyone help for this? i've just learn awk scripting & still confused with... (3 Replies)
Discussion started by: icy_blu_blu
3 Replies

10. Shell Programming and Scripting

AWK - conditional cause

Hello guys, I want to make a conditional cause in the following file using awk: awk '{ if ($2 != 0) print $1, $2, $3}' test.csv > test2.csv FILE EXAMPLE = test.csv string,number,date abc,0,20050101 def,1,20060101 ghi,2,20040101 jkl,12,20090101 mno,123,20020101 ... (2 Replies)
Discussion started by: Rafael.Buria
2 Replies
Login or Register to Ask a Question