I have a 5 columns csv file (space separated) like this :
username1 20130310 enabled 20130310 enabled
username2 20130310 enabled 20130321 disabled
username3 20130320 disabled 20130321 enabled
username4 20130310 disabled 20130310 disabled
I'am trying to change the value of the 4th column for username4
.
My script already gets the line number and the new value to store for username4
: so I would like to replace column 4 value with $newValue
at line number $lineNumber
.
In my sample:
newValue=anything
lineNumber=4
So that it will render:
username1 20130310 enabled 20130310 enabled
username2 20130310 enabled 20130321 disabled
username3 20130320 disabled 20130321 enabled
username4 20130310 disabled anything disabled
I plan to use sed
instead of awk
because with sed
we can do in-line changes with -i
Here is one way:
But avoiding
awk
becausesed
has the-i
option isn't a good reason.awk
is more suited to working with this kind of problem.With
awk
you can easily do field comparison and editing, using shell variable isn't a quoting nightmare and understanding scripts you wrote only yesterday isn't and issue unlike withsed
:This might work for you (GNU sed & Bash):
However beware. If the
newValue
contains a/
you will need to change the substitute command delimiter to something else e.g.s@\S\+@${newValue}@4