awk search/replace specific field, using variables for regexp & subsitution then overwrite file


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting awk search/replace specific field, using variables for regexp & subsitution then overwrite file
# 1  
Old 09-21-2012
awk search/replace specific field, using variables for regexp & subsitution then overwrite file

Hello,
I'm trying the solve the following problem.
I have a file which I intend to use as a csv called master.csv
The columns are separated by commas.
I want to change the text on a specific row in either column 3,4,5 or 6 from xxx to yyy depending upon if column 1 matches a specified pattern.
The column to change (i.e. 3/4/5/6) is dependent upon the value of the variable in a nested loop
The awk statement is located within a nested loop of a parent loop. It will use the variable value from the parent loop for column 1 and the variable value from the nested loop for column 3/4/5/6.
Below is an example of the code:
Code:
 
#Update the CSV file
cat $USERDUMP |awk -F , '{print $1}' |sort -u |\
 while read username
 do
     for LOOP_LIST in $SERVER_LIST
     do
     grep $username $DATADUMP.$LOOP_LIST >> /dev/null 2>&1
     RET_CODE=$?
     if [[ $RET_CODE -eq 0  ]]
     then
          echo    "User $username exists on $LOOP_LIST"
          awk -F "," -v user=$username -v server=$LOOP_LIST '/$user/ {gsub(/$server/,"Yes"); print}' master.csv
     else
          echo "User $username does not have account on $LOOP_LIST"
     fi
     done
 done

I know there are a few problems with my awk statement:
firstly, When passing the variables to awk nothing is produced by the print command.
I have tried the above on the command line using fixed values and I get the output I require:
Code:
$ awk -F "," '/userA/ {gsub(/ServerA/,"Yes"); print }' master.csv
userA,comment,Yes,ServerB,ServerC,ServerD

However, this creates another problem as I want to edit the master csv file. I can't redirect the awk stdout to a temp file then move back because I'd lose all the other entries. The only workarounds I can see for this problem are:
a) using awk to print the entire list with the changes applied, then I can use temp file. I'm not sure this is even possible as it defys the point of using awk pattern matching to print specific columns/rows.
b) run sed -i within the awk command (i've been googling the syntax to this but can't find it).
Apologies that was long winded. If you want me to clarify anything please let me know.
In essence I want to know:
1) how to pass multiple variables to awk command and use them in an regular expression & subsitution
2) how to edit the master csv file
Any help/advice would be much appreciated
# 2  
Old 09-21-2012
Code:
sed -i  "/$user/ s/$server/Yes/" master.csv_bkp

I would strongly recommend and i believe you would you use this on a backup file first and test..
This User Gave Thanks to msabhi For This Post:
# 3  
Old 09-21-2012
Please post:
1) sample of $USERDUMP,
2) contents of $SERVER_LIST,
3) sample of $DATADUMP.$LOOP_LIST (at least 1 file), and
4) sample output.

This will be very much helpful to people to provide an efficient solution to your problem.
This User Gave Thanks to elixir_sinari For This Post:
# 4  
Old 09-23-2012
I used the sed code instead of the awk command and this has given me exactly what I wanted!
Thanks for the help guys
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

awk to assign points to variables based on conditions and update specific field

I have been reading old posts and trying to come up with a solution for the below: Use a tab-delimited input file to assign point to variables that are used to update a specific field, Rank. I really couldn't find too much in the way of assigning points to variable, but made an attempt at an awk... (4 Replies)
Discussion started by: cmccabe
4 Replies

2. Shell Programming and Scripting

awk to replace a specific field in certain condition

Hi, I have a file like below PRUM,67016800 ,CC ,C1,67016800 , ,Y,Y,2 ,CK,BX,FOX ,00000001,EA,00000001,20141120 00:00:00, ,N,Y,Y,CK ABCDEF... (7 Replies)
Discussion started by: mady135
7 Replies

3. Shell Programming and Scripting

awk search and replace in a targeted field instead of $0

Hi I would like to apply this gawk command: gawk '{$0=gensub(/\y+\y/,"","g"); print}' file not to the whole $0 but just to the part of $0 that is between: (a number)"> and </mrk> Is it possible? thanks for your help. (4 Replies)
Discussion started by: louisJ
4 Replies

4. Shell Programming and Scripting

Replace specific field on specific line sed or awk

I'm trying to update a text file via sed/awk, after a lot of searching I still can't find a code snippet that I can get to work. Brief overview: I have user input a line to a variable, I then find a specific value in this line 10th field in this case. After asking for new input and doing some... (14 Replies)
Discussion started by: crownedzero
14 Replies

5. Shell Programming and Scripting

Advanced AWK Regexp substring to int & Replace

Hi! I have a difficult problem, to step up a unknown version number in a text file, and save the file. It would be great to run script.sh and the version gets increased. Example the content of the textfile.txt hello version = x bye This include three steps 1. First find the char after... (2 Replies)
Discussion started by: Beachboy72
2 Replies

6. Shell Programming and Scripting

AWK How to replace a field using 2 shell variables?

Hello everybody: I want to replace any field $2 of any file line (f.i. test.txt) matching $1 with a shell variable. $ cat test.txt F 0 B A H -12.33 Now I'm going to ask the value of variable B: $ SEARCHVAR=B $ OLDVAL=$(awk -v SEARCHVAR="$SEARCHVAR"... (4 Replies)
Discussion started by: basalt
4 Replies

7. Shell Programming and Scripting

awk how to replace specific field with new value

I need to replace specific field (x) in a table with new value (y): Input: 1 2 3 4 5 x 6 7 8 9 0 0 Output: 1 2 3 4 5 y 6 7 8 9 0 0 I have no idea how to do this. (10 Replies)
Discussion started by: setepo
10 Replies

8. Shell Programming and Scripting

awk search and replace field

I am writing a c++ program that has many calls of pow(input,2). I now realize that this is slowing down the program and these all should be input * input for greater speed. There should be a simple way of doing this replacement throughout my file with awk, but I am not very familiar with awk.... (2 Replies)
Discussion started by: bluejayek
2 Replies

9. Shell Programming and Scripting

awk search and replace and overwrite file

hi, i am doing awk '{gsub("hello", "bye", $0); print}' test.dat but I want to actually store the results of this global change into the file test.dat itself, i.e. I don't want the results to come to stdout, I want the results to overwrite the initial file how can I do this? thanks (3 Replies)
Discussion started by: JamesByars
3 Replies

10. Shell Programming and Scripting

search and replace using awk with variables

Hi, I have been trying to use awk with variables that needs to search for a pattern and replace it with another pattern, the patterns are supplied in a variable. I have tried several different ways without success and hope that someone can help me. Here are the details echo $UPC 07007457809... (2 Replies)
Discussion started by: jerardfjay
2 Replies
Login or Register to Ask a Question