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:
#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:
$ 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