Dynamic variable assignment


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Dynamic variable assignment
# 1  
Old 05-12-2016
Code Dynamic variable assignment

Code:
#!/bin/sh

if [ $# -ne 1 ]
then
  echo "Insufficient number of arguments ">> error".log" ;
  echo "Please check error log for more details";
  exit 1 ;
else
  file_name=$1".csv";
fi ;

in_par_number=`head -n1 $file_name | sed 's/[^,]//g' | wc -c`

read -a arr <<< `head -n1 $file_name | sed 's/[^,]/ /g'`

for e in ${arr[@]}; 
do
    echo $e
done

I would like to do variable assignment of all column values in header row, so that i can validate each and every column value later using this variables.
# 2  
Old 05-12-2016
I don't quite understand your intention, but there's usually a better way to do things than setting arbitrary variable names. Arrays, for example. Keep an array of the acceptable values for each column.

Shell does not need the help of the external programs head and sed to read and tokenize one line of a file.

Code:
IFS="," read -a ARR <inputfile.csv
echo Columns count is ${#ARR[@]}


Last edited by Corona688; 05-12-2016 at 01:42 PM..
# 3  
Old 05-12-2016
I have changed code as per your suggession however i am getting following error.
Code:
$ ./test.ksh Filename
./test.ksh[12]: read: bad option(s)
Columns are 0

OLD:
Code:
in_par_number=`head -n1 $file_name | sed 's/[^,]//g' | wc -c`

read -a arr <<< `head -n1 $file_name | sed 's/[^,]/ /g'`

for e in ${arr[@]}; 
do
    echo $e
done

NEW:
Code:
IFS="," read -a ARR <$file_name
echo Columns are ${#ARR[@]}


Last edited by Don Cragun; 05-24-2016 at 05:27 PM.. Reason: Change ICODE tags to CODE tags.
# 4  
Old 05-12-2016
-a only works in bash shell, not ksh. I'm not certain why you didn't encounter this error yourself, as your own code used -a too.

I still don't understand your intention for "dynamic variables" in any case, can you explain?
# 5  
Old 05-12-2016
KSH uses -A instead:

Code:
IFS="," read -A ARR <filename.csv

# 6  
Old 05-24-2016
I want to assign columns in first row of a csv file into dynamic variables in KSH.

---------- Post updated at 10:38 PM ---------- Previous update was at 10:31 PM ----------

example if first row of csv file is Jay,1000,Doshi,1234
code should assign
Code:
var1=Jay
var2=1000
var3=Doshi
var4=1234


Last edited by RudiC; 05-24-2016 at 05:35 PM.. Reason: Added (i)code tags
# 7  
Old 05-24-2016
Oh. That's the exact opposite of dynamic, when you know the variable names you want already.
Code:
exec 5<file.csv # Open file into FD 5

# Read first line
IFS="," read VAR1 VAR2 VAR3 VAR4 <&5
# Read second line
IFS="," read VAR1 VAR2 VAR3 VAR4 <&5
# etc

# A loop 
while IFS="," read VAR1 VAR2 VAR3 VAR4 <&5
do
        echo "column 1 is $VAR1"
done

# close file
exec 5<&-

Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Variable Assignment

Hi I am facing a problem. export local_folder=/opt/app/ cd /opt/app/abc/ abcversion="abc*" (abcga5 is inside /opt/app/abc/) echo $abcversion (it echoes the correct version as abcga5 ) Now when I reuse the value of abcversion for a below path: export... (6 Replies)
Discussion started by: ankur328
6 Replies

2. Shell Programming and Scripting

Same Variable Assignment

Hi I have a strange problem: In my shell script I am performing a copy task: . prop.txt cp -r $dir/ $dir/archive $dir is fetched from a property file (prop.txt) which stores its value dir=/opt/data Now the problem is another dir1 comes into picture. I only want to add... (1 Reply)
Discussion started by: ankur328
1 Replies

3. Shell Programming and Scripting

Dynamic variable assignment

My Code : -------------------------------------------- #!/bin/bash for i in `echo server1 server2` do eval ${i}_name = "apache" echo ${i}_name done -------------------------------------------- Current output : >./test.sh ./test.sh: line 5: server1_name: command not found... (3 Replies)
Discussion started by: sameermohite
3 Replies

4. Shell Programming and Scripting

'eval' used in variable assignment

pattern1=book { x=1 eval echo \$pattern$x } book (this is the output) But when I assign a variable to the output of the eval it doesn't work unless I prefix 2 times backslash before $ as shown below. { a=`eval echo \\$pattern$x` echo $a } book Why here twice "\" has to be... (3 Replies)
Discussion started by: ravisingh
3 Replies

5. Shell Programming and Scripting

Help with variable assignment

Hi, In AIX I have a variable with , (coma) separated values assigned to it like shown below var1=apple,boy,chris i want to convert this to var1='apple','boy','chris' the number of values assigned to var1 might change and it could be from 1 to n any suggestions please? (3 Replies)
Discussion started by: rahul9909
3 Replies

6. Shell Programming and Scripting

Dynamic variable assignment

Hi all, I’m very new to UNIX programming. I have a question on dynamic variable 1. I’m having delimited file (only one row). First of all, I want to count number of columns based on delimiter. Then I want to create number of variables equal to number of fields. Say number of... (5 Replies)
Discussion started by: mkarthykeyan
5 Replies

7. Shell Programming and Scripting

eval and variable assignment

Hi, i have an issue with eval and variable assignment. 1) i have a date value in a variable and that date is part of a filename, var1=20100331 file1=${var1}-D1-0092.xml.zip file2=${var2}-D2-0092.xml.zip file3=${var3}-D3-0092.xml.zip i am passing the above variables to a script via... (11 Replies)
Discussion started by: mohanpadamata
11 Replies

8. Shell Programming and Scripting

variable assignment using awk

Guys, Could you please help me out. I need two values in two variables using awk from the o/p of grep. example:- grep sdosanjh <filename> sdosanjh myhostname myfilename NOW WHAT I WANT IS :- sdosanjh should be in variable (say NAME) myhostname should be in variable (say... (8 Replies)
Discussion started by: sdosanjh
8 Replies

9. Shell Programming and Scripting

Dynamic variable assignment

Hi All, I have the below scenario: A file test.cfg with three fields>> DATA1 DATA2 DATA3 In the script I need to assign each of the fields to variables. The number of fields will not be constant (this case we have three). Im trying to do something like this: NUM=1 OUT_DAT_NO=3 ... (4 Replies)
Discussion started by: deepakgang
4 Replies

10. UNIX for Dummies Questions & Answers

@ in a variable assignment

Hello Everybody, Does anyone know what the @ symbol means in a csh script, if used with a variable assignment as below @ line = 1 why not just use.... set line=1 Many thanks rkap (1 Reply)
Discussion started by: rkap
1 Replies
Login or Register to Ask a Question