Visit The New, Modern Unix Linux Community


Multiple variables using awk and for loop for web form submission


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Multiple variables using awk and for loop for web form submission
# 1  
Multiple variables using awk and for loop for web form submission

Hi

My goal is to fill an HTML form and submit.

What I have managed to do:

1. curl command to fill up the form and submit
2. a file which has the input

curl command:
Code:
curl -v -b cookie.txt -d __CSRFToken__=dc23d5da47953b3b390ec68d972af10380908b14 -d do=create -d a=open -d email=test@test.net -d name=fullname -d source=Phone -d topicId=12 -d 198855e3047ff8a0=issuesummary1 -d message=details  http://localhost:8000/input.php

The input file looks like this;
Code:
57582	CVE-2011-3389	6.4	Medium	x.x.x.x	tcp	443	Bad vulnerability, fix ti	Full Name	email@xxxxxx.net	14			5	2	3months	0:00	s3	6
57582	CVE-2011-3389	6.4	Medium	x.x.x.x	tcp	8443	Bad vulnerability, fix ti	Full Name	email@xxxxxx.net	4			3	2	3months	0:00	s3	6
58751	CVE-2011-3389	4.3	High	x.x.x.x	tcp	8443	Bad vulnerability, fix ti	Full Name	email@xxxxxx.net	5			5	3	2months	0:00	s3	3
65821	CVE-2013-2566	4.3	Medium	x.x.x.x	tcp	8443	Bad vulnerability, fix ti	Full Name	email@xxxxxx.net	6			6	2	3months	0:00	s3	6
65821	CVE-2015-2808	4.3	Critical	x.x.x.x	tcp	8443	Bad vulnerability, fix ti	Full Name	email@xxxxxx.net	78			7	4	1month	0:00	s3	5
78479	CVE-2014-3566	4.3	Medium	x.x.x.x	tcp	8443	Bad vulnerability, fix ti	Full Name	email@xxxxxx.net	5			7	2	3months	0:00	s3	6
80035	CVE-2014-8730	4.3	Medium	x.x.x.x	tcp	8443	Bad vulnerability, fix ti	Full Name	email@xxxxxx.net	3			7	2	3months	0:00	s3	6

So every line of input will be assigned to the curl variable data (-d) for example:

Code:
curl -v -b cookie.txt -d __CSRFToken__=dc23d5da47953b3b390ec68d972af10380908b14 -d do=create -d a=open -d email=email@xxxxxx.net -d name=Full Name -d source=2months -d topicId=4 -d 198855e3047ff8a0=8443 -d message=Bad vulnerability, fix ti  http://localhost:8000/input.php


I was thinking

Code:
for i in $(awk -F "\t" '//{print $0}' inputfile)
do
"the curl command"
done

but I know it wont work.

I think I should assign the awk output to an array and use for loop to iterate the array. But how do i parse each field and then each line in the input file?

Please help. Thanks.
# 2  
What be your OS and shell?
# 3  
With bash, this snippet - although being far from complete and error proof - could point you in the right direction:

Code:
OLDIFS="$IFS"
IFS=$'\t'
while read LINE
  do    CUARR=($LINE)
        echo curl  -v -b cookie.txt -d __CSRFToken__=dc23d5da47953b3b390ec68d972af10380908b14 -d do=create -d a=open -d email=${CUARR[9]} -d name="'${CUARR[8]}'" -d source=${CUARR[13]} ...
  done < file
IFS="$OLDIFS"

Please complete to taste. The echo is there to prevent curl from running while testing and searching the correct array elements.
These 2 Users Gave Thanks to RudiC For This Post:
# 4  
In bash, if you read straight into an array you do not need to set and unset IFS globally, so RudiC's suggestion modified, becomes:
Code:
while IFS=$'\t' read -a CU
do
  curl  -v -b cookie.txt -d __CSRFToken__=dc23d5da47953b3b390ec68d972af10380908b14 -d do=create -d a=open -d "email=${CU[9]}" -d "name='${CU[8]}'" -d "source=${CU[13]}" ...
done < file

These 2 Users Gave Thanks to Scrutinizer For This Post:
# 5  
Thank you to both of you.

Now, I am having problem when there is an empty item in the input. The subsequent item in the array does not take the empty item which causes the output of the script to be not accurate. For example the second line of input below has empty second item so the array ${CUARR[1]} will be the third item "6.4" instead of empty. How to make ${CUARR[1]} stays empty?

Thanks.

Code:
35291   CVE-2004-2761   4       Medium  xxxxxxxxxxxxxxx tcp     443     SSL Certificate Signed Using Weak Hashing Algorithm     14      4       2       12/8/2016       0:00    s3      6
51192           6.4     Medium  xxxxxxxxxxxxxxx tcp     443     SSL Certificate Cannot Be Trusted       14      4       2       24/9/2016       0:00    s3      6


Last edited by zorrox; 06-07-2016 at 01:24 AM..
# 6  
Yes this is a problem for bash. If you have either ksh93 or zsh on your system (if not you can install it) then you can do this:
Code:
while IFS=$'\t\t' read -A CU
do
  curl  -v -b cookie.txt -d __CSRFToken__=dc23d5da47953b3b390ec68d972af10380908b14 -d do=create -d a=open -d "email=${CU[9]}" -d "name='${CU[8]}'" -d "source=${CU[13]}" ...
done < file


Last edited by Scrutinizer; 06-07-2016 at 12:23 PM..
This User Gave Thanks to Scrutinizer For This Post:
# 7  
Now comes the full beauty of the proposal in post#3 into play: if you insert

Code:
LINE=${LINE//$'\t\t'/$'\t'x$'\t'};

right after the do, it might fly...
This User Gave Thanks to RudiC For This Post:

Previous Thread | Next Thread
Thread Tools Search this Thread
Search this Thread:
Advanced Search

Test Your Knowledge in Computers #435
Difficulty: Medium
Angular and AngularJS are web application frameworks to use for developing multi-page web applications.
True or False?

8 More Discussions You Might Find Interesting

1. UNIX for Beginners Questions & Answers

Displaying multiple variables in for loop

Hi! I've run into a problem where my variables are displayed in the wrong order. Basically I'm supposed to use a file that has information like this username:firstname:lastname:etc:etc. What I'm interested in doing is reformating it into a something more like this: username lastname,... (2 Replies)
Discussion started by: reindeermountai
2 Replies

2. Shell Programming and Scripting

Loop with multiple delimited variables

hi, i need a portion in a audit logging shell script where i have to loop thru multiple variables. I need some help in accomplishing this. i have 3 variables var1=1,23,234 var2=a,ab,xyz var3=0,0,0 the variables will have variables number of values but same length.(3 in this case ) i... (10 Replies)
Discussion started by: rock1
10 Replies

3. UNIX for Dummies Questions & Answers

Reading multiple variables in a loop

Hi, I managed to read and print variable as shown in the below code. table_name=table1,table2,table3 i=0 IFS="," for i in $table_name do echo $i done Is there a way how I can read more than one variable. For example I need to read 2 variables and populate the output... (6 Replies)
Discussion started by: shash
6 Replies

4. UNIX for Dummies Questions & Answers

Multiple variables to be passed in a loop

Hi, I need to pass the multiple values of src1 to another variable. I managed to print it but not sure how to assign it to a variable in a loop. src1=01,02,03 echo $src1|awk 'BEGIN {FS=","} {for(i=1;i<=NF;i++) print $i}' I need to pass the value as src2=01 src2=02 src2=03 Thanks... (4 Replies)
Discussion started by: shash
4 Replies

5. Shell Programming and Scripting

How to use for/while loop with multiple variables?

Hi, I have two variables like below which will always be of the same size a=1:2:3 b=A:B:C I need to use a for/while loop that will have both the variables available. I cannot use an array here and will probably might iterate through the variable as echo $a | tr ':' '\n' and thus iterate... (5 Replies)
Discussion started by: Elizabeth H
5 Replies

6. UNIX for Dummies Questions & Answers

multiple variables in for loop

hi, I want an equivalent for loop for this C code in unix shell script... for(int i,int j;i<5;i++,j++) { } Please reply soon Regards Navjot (1 Reply)
Discussion started by: navjotsingh
1 Replies

7. Shell Programming and Scripting

While loop with Multiple variables

Hi , I am trying to write a script in kshell with while loop ,its like count=1 count_cmp=1 while ; do tail -$count tempfile | head -1 > tempstring ....... done However i get CIF.sh: line 33: ' I have checked thetrailing spaces , not sure what is... (4 Replies)
Discussion started by: amit1_x
4 Replies

8. Shell Programming and Scripting

for loop with multiple variables ?

I have a script which selects two 'sets' of system LVM device files from a tabular file 'mapfile' using awk : LIVELV=`awk '{print($1)}' mapfile` BCVLV=`awk '{print($3)}' mapfile` I wanted to pass these 'sets' into an LVM command 'loop' along the lines of : lvmerge $BCVLV $LIVELV ie.... (3 Replies)
Discussion started by: fosterian
3 Replies

Featured Tech Videos