I'm trying to write a short shell script to loop through a list (given by a certain command I run) line by line and push values to CSV file

list for example:

aaa bbb ccc ddd eee fff jjj kkk lll mmm nnn ooo uuu vvv www xxx yyy zzz 

Need to loop through this and for each line take 1st,4rd and 6th fields into variables so I can do some manipulation on them.

#!/bin/sh # CSVfile="/tmp/`hostname`.csv" filter=$( command ) touch $CSVfile # for i in $filter do first=$( printf "$i" | awk {'print$1'}) fourth=$( printf "$i" | awk {'print$4'}) sixth=$( printf "$i" | awk {'print$6'}) cmd=$( cat /home/app/$first/$fourth/out | grep value | awk -F: {'print$2'}) echo `date +%d%m%Y,%H%M%S`,"$sixth","$cmd" >> $CSVfile done 

The problem here is the for loop goes field by field and not line by line. need each line goes into $i so I can parse it with "awk"

2

1 Answer

This issue has been resolved by using while loop with IFS. Command output stored in variable ($filter) and read line by line by the loop. I could not find a way to push command directly into the loop w/o variable (I believe this is not supported by shell only bash)

#!/bin/sh # CSVfile="/tmp/`hostname`.csv" filter=$( command ) touch $CSVfile # while IFS= read -r line do first=$( printf "$i" | awk {'print$1'}) fourth=$( printf "$i" | awk {'print$4'}) sixth=$( printf "$i" | awk {'print$6'}) cmd=$( cat /home/app/$first/$fourth/out | grep value | awk -F: {'print$2'}) echo `date +%d%m%Y,%H%M%S`,"$sixth","$cmd" >> $CSVfile done < $filter 

Your Answer

Sign up or log in

Sign up using Google Sign up using Facebook Sign up using Email and Password

Post as a guest

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy