Using awk to change a specific column and in a specific row


Login or Register for Dates, Times and to Reply

 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Using awk to change a specific column and in a specific row
# 1  
Using awk to change a specific column and in a specific row

I am trying to change the number in bold to 2400

Code:
01,000300032,193631306,190619,0640,1,80,,2/
02,193631306,000300032,1,190618,0640,CAD,2/

I'm not sure if sed or awk is the answer. I was going to use sed and do a character count up to that point, but that column directly before 0640 might change values from file to file.

Last edited by vgersh99; 06-21-2019 at 04:55 PM.. Reason: Code tags, please!
# 2  
Quote:
Originally Posted by juggernautjoee
I am trying to change the number in bold to 2400

Code:
01,000300032,193631306,190619,0640,1,80,,2/
02,193631306,000300032,1,190618,0640,CAD,2/

I'm not sure if sed or awk is the answer. I was going to use sed and do a character count up to that point, but that column directly before 0640 might change values from file to file.
what makes row 2 different from row 1?
Please be more specific with your requirements....
# 3  
This is a .csv file that is populated daily. Each day it is a new file.

The bolded numbers change each day with each new iteration of the file. One day it'll be 0640, the next day it might be 0641. But instead of going in manually through vi daily to change this one value, I would like to put it into a command in cron.
# 4  
Code:
sed 's/,0640,/,2400,/' filename

changes the line#1 and line#2 in your example.
Again: if you want to change only line#2 then please tell us how to distinguish line#2 from line#1.
# 5  
To distinguish line 2, it will always start with - 02,193631306,000300032,1,
The issue with that command is that 0640 will change tomorrow to 0641 (or some other number). I know I can just go in and manually run that command every day, after looking at the file and changing the appropriate values. But i would like to just have something that either counts to the 33rd character in line 2, deletes the next 4 characters, and replaces them with 2400, or something to that affect.

Sorry for not being clear in the first few posts. All your help is much appreciated.
# 6  
Ok that's something, just put this as an address:
Code:
sed '/^02,193631306,000300032,1,/ s/,0640,/,2400,/' filename

If that looks good, and if you have GNU sed, change all your files with
Code:
sed -i.bak '/^02,193631306,000300032,1,/ s/,0640,/,2400,/' filename1 filename2 ...

The original files are saved as filename1.bak filename2.bak ....
Of course you can use wildcards like *.txt.
# 7  
I think juggernautjoee is looking for something more like:
Code:
awk '/^02,193631306,000300032,1,/{$0 = substr($0,1,32) "2400" substr($0,37)}1' file

or if the line to be changed is always line #2:
Code:
awk 'NR==2{$0 = substr($0,1,32) "2400" substr($0,37)}1' file

but the specification of the problem is not clear. If the desire is to change the 6th field instead of to change the 33rd through the 36th characters on the line, then use:
Code:
awk -F, '/^02,193631306,000300032,1,/{$6 = 2400}1' OFS=, file

or:
Code:
awk -F, 'NR==2{$6=2400}1' OFS=, file

With the sample input provided, all of the above produce the output:
Code:
01,000300032,193631306,190619,0640,1,80,,2/
02,193631306,000300032,1,190618,2400,CAD,2/


Last edited by Don Cragun; 06-22-2019 at 02:35 AM.. Reason: Fix broken and/or missing -F, on last two suggestions.
This User Gave Thanks to Don Cragun 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 #74
Difficulty: Easy
NeXTStep was based on the original BSD operating system.
True or False?

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Change some string in specific column with space

Hello All of Master Script , i need help to solve my problem before : mount /dev/rdsk/c1t69d0s6 /dev/rdsk/c1t69d0s6 /vol/cl123/PURGE1 ufs mount /dev/rdsk/c1t70d0s6 /dev/rdsk/c1t70d0s6 /vol/cl123/PURGE2 ufs expected : mount /dev/dsk/c1t69d0s6 /dev/rdsk/c1t69d0s6 /PURGE1 ufs mount ... (3 Replies)
Discussion started by: k0p0nkkk
3 Replies

2. Shell Programming and Scripting

Overwrite specific column in xml file with the specific column from adjacent line

I have an xml file dumped from rrd file, that I want to "patch" so the xml file doesn't contain any blank hole in the resulting graph of the rrd file. Here is the file. <!-- 2015-10-12 14:00:00 WIB / 1444633200 --> <row><v> 4.0419731265e+07 </v><v> 4.5045912770e+06... (2 Replies)
Discussion started by: rk4k
2 Replies

3. Shell Programming and Scripting

Print unique names in each row of a specific column using awk

Is it possible to remove redundant names in the 4th column? input cqWE 100 200 singapore;singapore AZO 300 400 brazil;america;germany;ireland;germany .... .... output cqWE 100 200 singapore AZO 300 400 brazil;america;germany;ireland (4 Replies)
Discussion started by: quincyjones
4 Replies

4. Shell Programming and Scripting

how to remove tab space only in the column of a specific row

Hi, I need help to remove tab delimited space in the $2 of a specific row. My file is like this:- file1.txt No_1 4 139 156 No_1 5 161 205 No_4 91 227 212 No_19 254 243 263 No_19 645 249 258 No_19 101 2492 2635 No_90 8 277 288... (5 Replies)
Discussion started by: redse171
5 Replies

5. UNIX for Dummies Questions & Answers

awk: convert column to row in a specific way

Hi all! I have this kind of output: a1|b1|c1|d1|e1 a2|b2|c2 a3|b3|c3|d3 I would like to transpose columns d and e (when they exist) in column c, and under the row where they come from. Then copying the beginning of the row. In order to obtain: a1|b1|c1 a1|b1|d1 a1|b1|e1 a2|b2|c2... (1 Reply)
Discussion started by: lucasvs
1 Replies

6. Shell Programming and Scripting

delete a row with a specific value at a certain column

Hi, I want to delete rows that have 0 at column 4. The file looks like this: chr01 13 61 2 chr01 65 153 0 chr01 157 309 1 chr01 313 309 0 chr01 317 469 1 chr01 473 557 0 I want to delete all rows with a 0 at column 4 chr01 13 61 2 chr01 157 309 1 chr01 ... (3 Replies)
Discussion started by: kylle345
3 Replies

7. Shell Programming and Scripting

change character(s) in specific column

Hi all! I need to change the final e every time when it is present in any word in column 1 to a; moreover, to change the final i again to a in any word in column 1, but just if word in column 2 begins with ha or si. Here below you can see a sample of my data: achwa ungeliachwa ungeli 1... (3 Replies)
Discussion started by: mjomba
3 Replies

8. Shell Programming and Scripting

Assigning a specific format to a specific column in a text file using awk and printf

Hi, I have the following text file: 8 T1mapping_flip02 ok 128 108 30 1 665000-000008-000001.dcm 9 T1mapping_flip05 ok 128 108 30 1 665000-000009-000001.dcm 10 T1mapping_flip10 ok 128 108 30 1 665000-000010-000001.dcm 11 T1mapping_flip15 ok 128 108 30... (2 Replies)
Discussion started by: goodbenito
2 Replies

9. UNIX for Dummies Questions & Answers

return a specific row using awk

Hello, I am using awk to process a file, and need to return a row that meets specific criteria. awk 'BEGIN{sets variables} {processes file, updates variables} END{need to print a row that meets the criteria in one of the variables} I have tried code in the END block like {print NR==var}... (1 Reply)
Discussion started by: badPuppy
1 Replies

10. Shell Programming and Scripting

Insert a text from a specific row into a specific column using SED or AWK

Hi, I am having trouble converting a text file. I have been working for this whole day now, still i couldn't make it. Here is how the text file looks: _______________________________________________________ DEVICE STATUS INFORMATION FOR LOCATION 1: OPER STATES: Disabled E:Enabled ... (5 Replies)
Discussion started by: Issemael
5 Replies

Featured Tech Videos