Update All Column Value by 1 if exist


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Update All Column Value by 1 if exist
# 1  
Old 03-19-2014
Update All Column Value by 1 if exist

Guys,

Running on Linux Ubuntu.

I need to find a method to automatically update all the rows for 2 columns and only if the rows not null.

e.g : based on the example data below, I want to update all rows under column 2 and 3 (COL2, COL3) with an increment of 1 and only if the value is not null.

raw data :
Code:
COL1,COL2,COL3,COL4
ABC,111,222,DF89
DEF,333, , EH98
HIJ,,666,YJ87

expected output :
Code:
COL1,COL2,COL3,COL4
ABC,112,223,DF89
DEF,333,,EH98
HIJ,,666,YJ87

Thanks,

Last edited by faizalms; 03-19-2014 at 01:38 PM.. Reason: remove spaces
# 2  
Old 03-19-2014
Moderator's Comments:
Mod Comment Use code tags for code, please.


What about lines 3 and 4?

Is there really supposed to be that much whitespace in it?
# 3  
Old 03-19-2014
apologies. I've edited the unwanted spaces.
# 4  
Old 03-19-2014
If you only wanted to edit line 2 like you've shown:

Code:
awk -F, -v OFS=, 'NR==2 { for(N=1; N<=NF; N++) if($N ~ /^[0-9]+$/) $N++ } 1' inputfile > outputfile

# 5  
Old 03-19-2014
cool! that works on line 2.
Further question. What if I want to apply the same formula on all lines?

and which part of this code that apply the increment by 1 ? In case I want to apply another value let say 5

Code:
awk -F, -v OFS=, 'NR==2 { for(N=1; N<=NF; N++) if($N ~ /^[0-9]+$/) $N++ } 1' inputfile > outputfile

Code:
COL1,COL2,COL3,COL4 
ABC,111,222,DF89 
DEF,333,444,EH98 
HIJ,444,666,YJ87

# 6  
Old 03-19-2014
Quote:
Originally Posted by faizalms
cool! that works on line 2.
Further question. What if I want to apply the same formula on all lines?
That's not what you showed, though. Your example data only showed line 2 being changed.

And changing all lines might do something to your header line, which would be bad, unless you don't actually have a header line.

To modify absolutely all lines, remove the 'NR==2', which means, 'only run this code block when NR (line number) is 2'.

-F, and -v OFS=, set the input and output separators, so you don't accidentally change your commas into spaces.

Code:
awk -F, -v OFS=, '{ for(N=1; N<=NF; N++) if($N ~ /^[0-9]+$/) $N=($N+1) } 1' inputfile > outputfile

I've highlighted the part which changes the column and made the code a little more obvious. ++ is an operator borrowed from the C language, which means 'add 1 to this variable', that's the longhand equivalent.

$ doesn't mean variable in awk, though. Any unquoted string of letters is a variable. $ means "use this variable or expression as a column" -- so when N=4, $N gives you column 4. And $N=5 sets column 4 to the value of 5. Etc.

So, for every line, this loops over all columns, and adds 1 to any which are purely numbers(i.e. match the regex /^[0-9]+$/ ).

The 1 at the end of the line makes it print every single line.
# 7  
Old 03-19-2014
If I understood the problem correctly, I think this might be closer to what was wanted:
Code:
awk '
BEGIN { FS = OFS = "," }
{       gsub(/ /, "") }
$2 != "" && $3 != "" && NR > 1 {
        $2 += 1
        $3 += 5
}
1' raw

This increments the second field by 1 and the 3rd field by 5 as long as both fields are non-null (after removing spaces). Change the values shown in red if you want to use different increments.
If the file raw contains:
Code:
COL1,COL2,COL3,COL4
ABC,111,222,DF89
DEF,333, , EH98
HIJ,,666,YJ87
DEF,333,444,EH98 
HIJ,444,666,YJ87

the output will be:
Code:
COL1,COL2,COL3,COL4
ABC,112,227,DF89
DEF,333,,EH98
HIJ,,666,YJ87
DEF,334,449,EH98
HIJ,445,671,YJ87

This User Gave Thanks to Don Cragun For This Post:
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Programming

Update a column from a Join

Here is my select that I have to identify the child records that are Open (e.c7 < 6000) when the parent (t2068) c.c7 > 3 SELECT c.c1000000161, c.c7, c.c1000000019, e.c1000000829 FROM t2068 c INNER JOIN t1533 e ON e.c1000000829 = c.c301572100 where c.c7 > 3... (2 Replies)
Discussion started by: newborndba
2 Replies

2. Shell Programming and Scripting

Update a mysql column via bash script

Hello, I want to check the value of all MySQL columns.(column name is "status") via bash script. If value is "0" at I want to make only single column value to "1" I have many "0" values on mysql database(on "status" column) "0" means it is a draft post. I want to publish a post. I... (2 Replies)
Discussion started by: tara123
2 Replies

3. Programming

Column update using Informix

Hi, I am using INFORMIX 8 and trying to update column value by apending '09' to existing record . update sample_data_table set Name = Name||22 where id = 90 and state = NY This worked fine in oracle Database,But throwing error in informix . I need output as Ravi22 for Ravi record in... (0 Replies)
Discussion started by: Perlbaby
0 Replies

4. Shell Programming and Scripting

Update column in File

I Have a file a.txt in the below format 1 23 50 1 25 6666666666666 1 23 34 If the third column value is greater than two digit then make it 0 New Data File --------------- a.txt 1 23 50 1 25 0 1 23 34 Need your help regarding this (5 Replies)
Discussion started by: deep_kol
5 Replies

5. Shell Programming and Scripting

Add column and update file

I have to update my file from server file. Server file A on location serverfile="/orf/ddl/plokall/fileA" myfile=""/orf/ddl/plokall/myupdatedfile" fileA: KALKIKLOKPO001 10.1 HFJFKSLOKPO002 11.4 POLKAK5143 184.3 POLKJI5144 107.5 OKILDL5145 107.10 CVT0909 10.11 KJL0405... (3 Replies)
Discussion started by: asavaliya
3 Replies

6. Shell Programming and Scripting

Update file to add as last column

I need to update a text file within a loop so that the value is added creating a new column at the end. I cannot use paste because I dont know the number of files. If I use >> the value is added after the last row. Please help. For example: Input file: Column 1 Column2 - ... (2 Replies)
Discussion started by: Surabhi_so_mh
2 Replies

7. Web Development

Mysql question: Best way to update a column containing 8 million rows

Hi all, I was wondering if anyone knew a good/safe way to update a single column in a table that could contain upto 8 million rows... simple command like: UPDATE set blah=foo where bar=XXX; I will be running this on tables being written to and tables that have already been created. ... (3 Replies)
Discussion started by: muay_tb
3 Replies

8. Shell Programming and Scripting

Update a column value in csv files

Hi all I am new to scripting and i have an application from which i will export into a csv file as follows Column1, Column2, Column3 Sno1, Folder\Test.txt, Fail Sno2, Folder\Test1.txt, Pass Sno3, Folder\Test2.txt, Fail Now i need to change the column2 in all the rows from "Folder\" ... (1 Reply)
Discussion started by: rajeshrp
1 Replies

9. Shell Programming and Scripting

To update a column in a table through shell script

Hi All, I need to write a shell script in UNIX that should accept booking number as an argument and update it with value "NULL" if the transaction date is greater than 2 years. Booking number and transaction_date are the two columns of the table table_booking. Something like this, through... (3 Replies)
Discussion started by: shilpa_acc
3 Replies

10. Shell Programming and Scripting

Column update

I have two files: fileA a,b,c,10,apple a,b,c,20,orange a,b,c,10,grape d,e,f,5,pear d,e,f,100,pear x,y,z,15,lemon x,y,z,20,apple x,y,z,30,grape fileB a,b,c,20 d,e,f,100 x,y,z,30 If col1=col1,col2=col2 and col3=3 of fileA to fileB, then take value in 4th col of fileB and replace... (5 Replies)
Discussion started by: giannicello
5 Replies
Login or Register to Ask a Question