How to fetch values from a line in a file to variables in UNIX?


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting How to fetch values from a line in a file to variables in UNIX?
# 8  
Old 08-19-2013
Quote:
Originally Posted by karthikram
Actually my requirement is to get values from line by line in a file and assign to variable, it is good that for each line if there is separate variable also, from the above idea provided.
We get asked for this more often than you can imagine, but to date nobody's ever given a better reason for it than "it seemed like a good idea at the time". It's always silly -- how would you even use those variables? It'd take much eval madness to do a loop over variable1 ... variablen but a loop over an array is trivial.
This User Gave Thanks to Corona688 For This Post:
# 9  
Old 08-19-2013
Hi Corona,

Thanks, Let me explain the reason, we are writting scripts and our superiors want them as HTML reports,
we have some security reasons so we are not allow html packages from db side, only solution we have is through shell script ,
files which are huge in row wise as well as column wise doesnt make any sense of making awk of some minimum 20 or above in a file,

so we required two loops in line wise as well as getting the data inside the line,

i came to heard that korn shell doesnt support multidimensional array ,

atleast single dimension is possible for each line if there is separate variable that could be possible to call them in array,

Thanks anyway, If any solution by chance if found or worked Please do let me know.

And If possible anyone could give example on "eval", hopefully that could be useful to me.

Thanks,
Regards,
karthikram
# 10  
Old 08-19-2013
I get from that:
1) You have huge files
2) You must output HTML
3) You'd like multidimensional arrays

This actually sounds like exactly the kind of situation awk is meant for. It has things you can easily use as huge multidimensional arrays, and even if your lines are bigger than its line-length limit(which GNU/linux awk doesn't have, anyway) you can abuse the value of RS to read one field at a time instead.

Shell on the other hand is very poor for this. It doesn't have anything like multidimensional arrays, its performance is poor, and its variables are liable to be very limited in size.

I can show you more detail on this if you tell us more about what you want rather than details on the hoops you'd expected to jump through to do so.

Last edited by Corona688; 08-19-2013 at 01:53 PM..
This User Gave Thanks to Corona688 For This Post:
# 11  
Old 08-19-2013
Whilst I fully accord with Corona688 about better not suboptimize but take the whole picture into account to find a good solution, here's a small bashism that might do what you're so eager for:
Code:
while IFS=\| read -a WORD$((++i)); do eval echo -e WORD$i "\\\t" $\{\#WORD$i[@]} "\\\t" $\{WORD$i[@]}; done < file
WORD1      9      line1 111 22 33 44 55 aa bb cc
WORD2      13      line2 dd ee ff gg ii jj kk ll mm nn oo pp

Your file's lines will be in WORD1, WORD2,... WORDn arrays.
Not sure if and/or how this works in ksh.
This User Gave Thanks to RudiC For This Post:
# 12  
Old 08-20-2013
Hi,

Thanks , the script worked well in ksh, now using your script each variable can be applied for each line ,
It is very helpful to me , But i am getting error while trying to use while loop or until after "eval" to get variable array's each element.
I will search the forum to get suitable result, meanwhile if anybody has solution it could be fine for me.
I should not expect more anyway i will workaround to get and if anyone knows Please do let me know.

Code:
$more test.txt
111|22|33|44|55|aa|bb|cc
dd|ee|ff|gg|ii|jj|kk|ll|mm|nn|oo|pp

Code:
$more test_script_6.ksh
#! /usr/bin/ksh
WORD=0
i=0
while IFS=$'\|' read -A WORD$((++i)); do
eval echo -e WORD$i "\\\t" $\{#WORD$i[@]} "\\\t" $\{WORD$i[@]}
echo -e "WORD2 WORD2[3]=${WORD2[3]}"
#j=0
#until [[ $j == "$\{#WORD$i[@]}" ]]; do
#echo -e WORD$i WORD$i[$j]=${WORD$i[$j]}
#j=$((j + 1))
#done
;done < test.txt

Code:
$./test_script_6.ksh
WORD1    8       111 22 33 44 55 aa bb cc
WORD2 WORD2[3]=
WORD2    12      dd ee ff gg ii jj kk ll mm nn oo pp
WORD2 WORD2[3]=gg


Code:
$more test_script_6.ksh
#! /usr/bin/ksh
WORD=0
i=0
while IFS=$'\|' read -A WORD$((++i)); do
eval echo -e WORD$i "\\\t" $\{#WORD$i[@]} "\\\t" $\{WORD$i[@]}
echo -e "WORD2 WORD2[3]=${WORD2[3]}"
j=0
until [[ $j == "$\{#WORD$i[@]}" ]]; do
echo -e WORD$i WORD$i[$j]=${WORD$i[$j]}
j=$((j + 1))
done
;done < test.txt

Code:
$ksh -x test_script_6.ksh
+ WORD=0
+ i=0
test_script_6.ksh: line 3: syntax error at line 9: `$' unexpected

tried with "while" also same error.

Thanks,
Regards,
karthikram

---------- Post updated at 01:05 PM ---------- Previous update was at 12:33 PM ----------

Hi Corona,

Thanks , i will try awk RS variable too, if this is achived and there wont be any loop again,

I wil try to come up and will post for review/suggestion.

Thanks,
Regards,
karthikram
# 13  
Old 08-20-2013
Why - do you think - did I put that eval into the almost identical line 4 above your erroneous line? And, see and read again Corona688's post#8.
This User Gave Thanks to RudiC For This Post:
# 14  
Old 08-23-2013
Hi , Thanks , Now i understood that through shell it is not possible to make loop in main variable decomposing it to arrays of elements inside that each array further fetching array as array is not possible,

Please correct me if i am wrong this kind of multidimensional array and nested concept is available in PERL right.

I figured it out my script, Please let me know your suggestion or advise, how better this can be written.

Code:
$more test_script_8.ksh
#! /usr/bin/ksh

awk 'BEGIN{RS="\n";
FS="|";
}
{
print "<TR>";
for (i = 1; i <= NF; i++)
print "<TD>" $i "</TD>";
print "</TR>";
print "\n";
}' test.txt

Code:
$./test_script_8.ksh
<TR>
<TD>111</TD>
<TD>22</TD>
<TD>33</TD>
<TD>44</TD>
<TD>55</TD>
<TD>aa</TD>
<TD>bb</TD>
<TD>cc</TD>
</TR>


<TR>
<TD>dd</TD>
<TD>ee</TD>
<TD>ff</TD>
<TD>gg</TD>
<TD>ii</TD>
<TD>jj</TD>
<TD>kk</TD>
<TD>ll</TD>
<TD>mm</TD>
<TD>nn</TD>
<TD>oo</TD>
<TD>pp</TD>
</TR>


Thanks,
Regards,
karthikram
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Fetch the values based on a Key using awk from single file

Hi, Please help to fetch the values for a key from below data format in linux. Sample Input Data Format 11055005|PurchaseCondition|GiftQuantity|1 11055005|PurchaseCondition|MinimumPurchase|400 11055005|GiftCatalogEntryIdentifier|Id|207328014 11429510|PurchaseCondition|GiftQuantity|1... (2 Replies)
Discussion started by: mohanalakshmi
2 Replies

2. Shell Programming and Scripting

Read record from the text file contain multiple separated values & assign those values to variables

I have a file containing multiple values, some of them are pipe separated which are to be read as separate values and some of them are single value all are these need to store in variables. I need to read this file which is an input to my script Config.txt file name, first path, second... (7 Replies)
Discussion started by: ketanraut
7 Replies

3. UNIX for Dummies Questions & Answers

Getting values of 2 columns from sql query in UNIX variables

Hi, I have connected to oracle database with sqlplus -s / <<EOF select ename, age from emp where empid=1234; EOF I want to save the values of ename and age in unix shell variables. Any pointers would be welcome.. Thanks in advance!!1 Cheers :):):):) (1 Reply)
Discussion started by: gonchusirsa
1 Replies

4. Shell Programming and Scripting

Fetch Data from File using UNIX or Perl

Hello, How All are Doing today. I have a issue, I have a file which contains the data as follow <ENVELOPE><ENVELOPE_ID>TEST</ENVELOPE_ID><ENVELOPE_EXTERNAL_ID></ENVELOPE_EXTERNAL_ID><ENVELOPE_VERSION>2</ENVELOPE_VERSION><SIResourceDefaultVersion>true</SIResourceDefaultVersion><TYPE>GS... (1 Reply)
Discussion started by: adisky123
1 Replies

5. Shell Programming and Scripting

How to fetch File from a URL to Unix Server?

Hello All, I wanted to get the software to be fetched from the Service Provide URL to my unix server. I tired using the mget, but resulted in error. Please take a look. $ wget -O V3-0-5-2.Solaris8-SPARC.tar.gz --http-user=hd87es3 --http-passwd=987dnja7 http://beyond.abinitio.com... (3 Replies)
Discussion started by: raghunsi
3 Replies

6. Shell Programming and Scripting

fetch last line no form file which is match with specific pattern by grep command

Hi i have a file which have a pattern like this Nov 10 session closed Nov 10 Nov 9 08:14:27 EST5EDT 2010 on tty . Nov 10 Oct 19 02:14:21 EST5EDT 2010 on pts/tk . Nov 10 afrtetryytr Nov 10 session closed Nov 10 Nov 10 03:21:04 EST5EDT 2010 Dec 8 Nov 10 05:03:02 EST5EDT 2010 ... (13 Replies)
Discussion started by: Himanshu_soni
13 Replies

7. Shell Programming and Scripting

How to fetch a specific line from file

Hi, I have text file in the following strucher . The files contain hondreds of lines. value1;value2;value3;value4 I would like to get back the line with lowest date (values4 field). In this case its line number 3. groupa;Listener;1;20110120162018 groupb;Database;0;20110201122641... (4 Replies)
Discussion started by: yoavbe
4 Replies

8. Shell Programming and Scripting

[BASH] mapping of values from file line into variables

Hello, I've been struggling with this for some time but can't find a way to do it and I haven't found any other similar thread. I'd like to get the 'fields' in a line from a file into variables in just one command. The file contains data with the next structure:... (4 Replies)
Discussion started by: semaler
4 Replies

9. Shell Programming and Scripting

How to fetch data from a text file in Unix

I want to fetch passwords from a common file xxxx.txt and use it in a script. Currently the password is hardcoded so this have to be changed so that password can be fetched from text file..... Please reply asap.. Thanks (4 Replies)
Discussion started by: shikhakaul
4 Replies

10. Programming

how do u assign the values to different variables when it is presneted in one line??

hey people.. i have a configuration file that looks like 7080 7988 net04.xxxxx.edu 20 where 20 is the number of threads in the thread pool initially. net04.xxxxx.edu is the hostname. and 7080 7988 are two ports. first one for client requests and second one for dns communication. now my... (2 Replies)
Discussion started by: SwetaShah
2 Replies
Login or Register to Ask a Question