Reading data from a specific line in a text file


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Reading data from a specific line in a text file
# 1  
Old 03-31-2009
Reading data from a specific line in a text file

Hello,
I have a problem which is giving me headache for days, can some please help. Please see code and text fiel below. Please see text in red for the problem I am facing



# Program gets an input x from user

while read line ; do



echo $line | read a b c d

if [ "$x" = "$a" ] ; then

( IFS=-
printf ' 1\n 1\n 0\n 0\n'
printf ' %s\n' $b
printf ' 1\n 7\n 0\n'
printf ' %s\n' $c

# if $b (second row in the text file below) is > 1, I want the code
to go to the next line and print the $c and increment a counter
until counter equals $b and then move to the next set of code
below

printf ' 1\n 1\n 0\n 0\n 0\n N\n 1\n 100\n' ) |
"$LOTO"/bin/loto_tsim > /dev/null 2>&1
else
SOMETHING
fi

done < LottWagers2.txt # Text file data is sent to the while loop



TEXT FILE
============================================
1 3 02-01-27-28-29-30 (99) Both 1
0 1 01-31-32-33-34-35 (99) Both 3
0 1 03-06-09-10-20-21 (99) Both 3
2 1 05-31-32-33-34-35 (99) Both 3
2 1 06-07-09-10-20-21 (99) Both 3
4 1 05-07-08-09-10-25 (99) Both 4
4 1 01-02-10-11-24-25 (99) Both 7
4 1 01-02-31-32-33-34 (99) Both 5
4 1 02-04-31-32-33-34 (99) Both 5
4 1 06-02-09-10-20-21 (99) Both 3
# 2  
Old 03-31-2009
Quote:
Originally Posted by jermaine4ever
Hello,
I have a problem which is giving me headache for days, can some please help. Please see code and text fiel below. Please see text in red for the problem I am facing

# Program gets an input x from user

Please put code inside [code] tags.
Quote:
Code:
while read line ; do
        echo $line | read a b c d


That will only work in ksh; to make it more portable:

Code:
while read a b c d; do

Quote:
Code:
   if  [ "$x" = "$a" ] ; then


Where have you defined $x?
Quote:
Code:
           ( IFS=-
           printf ' 1\n 1\n 0\n 0\n'
           printf ' %s\n' $b
           printf ' 1\n 7\n 0\n'
          printf ' %s\n' $c

# if $b (second row in the text file below) is > 1, I want the code


Do you mean second column?

Where do you test that condition? I don't see it anywhere.
Quote:
Code:
# to go to the next line and print the $c and increment a counter
# until counter equals $b and then move to the next set of code
# below


You don't increment a counter anywhere.
Quote:
Code:
           printf ' 1\n 1\n 0\n 0\n 0\n N\n 1\n 100\n' ) |
           "$LOTO"/bin/loto_tsim > /dev/null 2>&1


What is "$LOTO"/bin/loto_tsim?
Quote:
Code:
    else
         SOMETHING
    fi

done < LottWagers2.txt     # Text file data is sent to the while loop


TEXT FILE
============================================
Code:
1 3 02-01-27-28-29-30 (99) Both 1
0 1 01-31-32-33-34-35 (99) Both 3
0 1 03-06-09-10-20-21 (99) Both 3
2 1 05-31-32-33-34-35 (99) Both 3
2 1 06-07-09-10-20-21 (99) Both 3
4 1 05-07-08-09-10-25 (99) Both 4
4 1 01-02-10-11-24-25 (99) Both 7
4 1 01-02-31-32-33-34 (99) Both 5
4 1 02-04-31-32-33-34 (99) Both 5
4 1 06-02-09-10-20-21 (99) Both 3


It might help if you explain what you are trying to accomplish with your script.
# 3  
Old 04-01-2009
Hello CFAJohnson,
Thanks for your reply and apologies for if me email did not made sense, I did not included all of the code because I wanted to focus on the problem I was facing. But let me try and give you a better explaination of the my objective and the issue that I am facing.


1. I have got the following text file (below) the , the columns data are
'Test Day', 'Board', 'Betting Number'.


TEXT FILE
============================================

1 3 02-01-27-28-29-30
0 1 01-31-32-33-34-35
0 1 03-06-09-10-20-21
2 1 05-31-32-33-34-35
2 1 06-07-09-10-20-21
4 1 05-07-08-09-10-25
4 1 01-02-10-11-24-25
4 1 01-02-31-32-33-34
4 1 02-04-31-32-33-34
4 1 06-02-09-10-20-21

2. Consider a ticket system, that can have more that one boards (i.e
betting more than one numbers. So take for example the first line, the
board is 3, which means that one ticket will bet with Lin1, Line2 and
Line 3 Betting Numbers.
The problem I am having is that I cannot get the code to read Line2
and then Line 3 Betting Number because the board in Line 1 is greater
than 1.
The code works fine as it is, it reads each line in the text file and
send the data to another shell script ("$LOTO"/bin/loto_tsim
> /dev/null 2>&1 ) see code below

CODE ===========



Code:
#!/bin/ksh
#set -x

# This program extract data from a text file which holds wagering information for games and use these data as parameters
# for the TSIM (Transaction Simulator), which then generates various combinations of wagers (from the text file) using 
# a vitual terminal (terminal 100)
 

main() 
{
 echo "\nPlease enter the Test Day or 0 for all days: "  
 read x                                                  
 
 count=0
        xcount=1
        proveen=0
       
        checker="false"
 
     while read line ; 
 
 do                            
  
                
        echo $line | read a b c d                        
           
   if  [ "$x" = "$a" ] ; then               
                 
           ( IFS=-     
      printf ' 1\n 1\n 0\n 0\n'
      printf ' %s\n' $b                                
    printf ' 1\n 7\n 0\n'
    printf ' %s\n' $c    
                  
    
    
                                 
      printf ' 1\n 1\n 0\n 0\n 0\n N\n 1\n 100\n' ) | 
      "$LOTO"/bin/loto_tsim > /dev/null 2>&1              
                   
    let count=count+1
    checker="true"
    echo "Wager Number ${count} is:" $c  
                                echo 'the value of board is :' $b
    echo 'the line number is :' $line                                              
   
                            
    elif [ "$x" = 0 ] ; then                         
                      
                       ( IFS=-
      printf ' 1\n 1\n 0\n 0\n 1\n 1\n 7\n 0\n'
      printf ' %s\n' $c 
    let lncounter=lncounter+1
      printf ' 1\n 1\n 0\n 0\n 0\n N\n 1\n 100\n' ) | 
      "$LOTO"/bin/loto_tsim > /dev/null 2>&1
                      
    let count=count+1
    checker="true"
    echo "Wager Number ${count} is:" $c
     else 
    let proveen=proveen+1
     
                                              
                                  
           fi
                
     done < LottWagers2.txt     # Text file data is sent to the while loop
if  [ "$checker" = "true" ] ; then
    anotherchance
else
    backup
fi       
}

backup() {
        
 echo "\nTest day not found, would you like to try again? [Y/N] : "  
 
       typeset -u pp       
       read ans
       pp=$ans 
       
 
  if [ "$pp" = "Y" ] ; then
   
      main
   elif [ "$pp" = "N" ] ; then
          echo "\n ******** GOODBYE ************ \n"
  else
     echo "\nUnrecognised entry \n"
                fi
}
 
anotherchance()
{
       echo "\nWould you like to wager again? [Y/N] : "   
       
       typeset -u pp   
       read wa
       pp=$wa
       
         if [ "$pp" = "Y" ] ; then    
    main
   elif [ "$pp" = "N" ] ; then
      echo "\n ******** GOODBYE ************ \n"
   else
     echo "\nUNRECOGNISED ENTRY"
   anotherchance
                
   
                        fi

}

main


Last edited by Franklin52; 04-02-2009 at 05:54 AM.. Reason: adding code tags
# 4  
Old 04-01-2009
Quote:
Originally Posted by jermaine4ever
The problem I am having is that I cannot get the code to read Line2
and then Line 3 Betting Number because the board in Line 1 is greater
than 1.

Why can you not do it? I don't see any code that even tries.

You need to check the value of $b and if it is greater than 1, read $(( $b - 1 )) lines from the file.
# 5  
Old 04-02-2009
Reading specific line in a text file

Hello cfaJohnson,
I do apologise, but I had the code in origianally but becasue it was not working, I took it out and sent you the currently working version.
The full code is below:

Code:
#!/bin/ksh
#set -x

# This program extract data from a text file which holds wagering information for games and use these data as parameters
# for the TSIM (Transaction Simulator), which then generates various combinations of wagers (from the text file) using 
# a vitual terminal (terminal 100)
 

main() 
{
 echo "\nPlease enter the Test Day or 0 for all days: "  
 read x                                                  
 count=0
        proveen=0
      lnum=0
        checker="false"
 
     while read line ; 
 
 do                                     
        
        echo $line | read a b c d                        
  
  let lnum=lnum+1
     
   if  [ "$a" = "$x" ] ; then               
                
    
           ( IFS=-     # Ignores dashes
      printf ' 1\n 1\n 0\n 0\n'
      printf ' %s\n' $b                                
    printf ' 1\n 7\n 0\n'
    printf ' %s\n' $c   

    checkboards
 
      printf ' 1\n 1\n 0\n 0\n 0\n N\n 1\n 100\n' ) | 
      "$LOTO"/bin/loto_tsim > /dev/null 2>&1      #Parameters are sent to tsim
                   
    let count=count+1
    checker="true"
        
   
    
    checkboards  
    echo "\nWager Number ${count} is:" $c  
    
                            
    elif [ "$x" = 0 ] ; then                         
                      
                       ( IFS=-
      printf ' 1\n 1\n 0\n 0\n 1\n 1\n 7\n 0\n'
      printf ' %s\n' $c 
      printf ' 1\n 1\n 0\n 0\n 0\n N\n 1\n 100\n' ) | 
      "$LOTO"/bin/loto_tsim > /dev/null 2>&1
                      
    let count=count+1
    checker="true"
    echo "Wager Number ${count} is:" $c
     else 
    let proveen=proveen+1
                   
                                  
           fi
                
     done < TSimWager.txt     
if  [ "$checker" = "true" ] ; then
    anotherchance
else
    backup
fi       
}
 
#  If the Test Day the user enters in the Main program does not exist or the ebtry is not recognise
#  Then this code gives them a chance to try again
backup() {
        
 echo "\nTest day not found, would you like to try again? [Y/N] : "  
 
       typeset -u pp       # Changes the variable value to Uppercase
       read ans
       pp=$ans 
       
 
  if [ "$pp" = "Y" ] ; then
   
        main
   elif [ "$pp" = "N" ] ; then
          echo "\n ******** GOODBYE ************ \n"
  else
     echo "\nUnrecognised entry \n"
                fi
}
 
anotherchance()
{
       echo "\nWould you like to wager again? [Y/N] : "   # Give user the chance to wager again
       
       typeset -u pp   # Changes the variable value to Uppercase
       read wa
       pp=$wa
       
         if [ "$pp" = "Y" ] ; then    
    
    echo "\nWould you like to choose a different game? [Y/N] : "
                        typeset -u g
          read g
                               
                           
    if [[ $g = "Y" ]] ; then 
     
     SimMenu.sh
     
    elif [[ $g = "N" ]] ; then 
     
     main
                                            
      else 
                               echo "\nUnrecognised entry \n"
      fi 
   elif [ "$pp" = "N" ] ; then             # Quits the program if user choose not to wager
      echo "\n ******** GOODBYE ************ \n"
   
   else
      echo "\nUNRECOGNISED ENTRY"
    anotherchance
                
   
                        fi
 
}
checkboards()
{
 
ln=$lnum
mycounter=1
 if [ "$b" > 1 ] ; then
     
    while [ "$b" < "$mycounter" ] ; do 
  
        sed -n $ln'p' TSimWager.txt | printf ' %s\n' $c
        print 'JUST PRINTED THE NUMBERS'
 let ln=ln+1
        let mycounter=mycounter+1
 echo "\nWager Number ${ln} is:" $c 
    done
 fi
}

main                             # Program calls the main method first


Last edited by Franklin52; 04-02-2009 at 05:55 AM.. Reason: adding code tags
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Extract specific line in an html file starting and ending with specific pattern to a text file

Hi This is my first post and I'm just a beginner. So please be nice to me. I have a couple of html files where a pattern beginning with "http://www.site.com" and ending with "/resource.dat" is present on every 241st line. How do I extract this to a new text file? I have tried sed -n 241,241p... (13 Replies)
Discussion started by: dejavo
13 Replies

2. Shell Programming and Scripting

Reading text file, comparing a value in a line, and placing only part of the line in a variable?

I need some help. I would like to read in a text file. Take a variable such as ROW-D-01, compare it to what's in one line in the text file such as PROD/VM/ROW-D-01 and only input PROD/VM into a variable without the /ROW-D-01. Is this possible? any help is appreciated. (2 Replies)
Discussion started by: xChristopher
2 Replies

3. Shell Programming and Scripting

Reading and analysing data in a text file

Hi, I have below type of data in a text file in unix. Emp_Name Emp_Dept Raj 101 Amruta 100 Shilpa 100 Rohit 123 Amol 198 Rosh 101 Gaurav 198 Number of employees can be even more. Need a command or a... (2 Replies)
Discussion started by: rajneesh_kapoor
2 Replies

4. UNIX for Dummies Questions & Answers

Reading a specific line from a file

Hi All, I am having 100 lines a text file say a.txt. I want read the 'nth' line from that file inside a script. Kindly tell us how to that. (2 Replies)
Discussion started by: boopathyvasagam
2 Replies

5. Shell Programming and Scripting

How to retain backslash in a line while reading a data file?

Hello Firends I have a file that contains data within single quotes, which has meaning of its own. When I am trying to parse through the file for a different functionality I noticed that I was loosing the backslash when occurrences in the file look like ('\0'). I would want to retain the... (3 Replies)
Discussion started by: easwam
3 Replies

6. Shell Programming and Scripting

Update a specific line in a file while reading sequentially

All, I know this is a very naive question but I could not find a way to get this working! I have a file with values like input.file Value1 Value2 server1/mylogin,mypasswd Value3 Value4 And in my code, I am reading the file line by line and processing it. #! /bin/ksh... (6 Replies)
Discussion started by: bharath.gct
6 Replies

7. Shell Programming and Scripting

Reading data from a specific line in a text file

hello, I have got the following problem that I am hoping someone can help with please. 1. I have got the following text file (below) , the columns data are 'Test Day', 'Board', 'Betting Number'. TEXT FILE ============================================ 1 3 02-01-27-28-29-30 0 1... (1 Reply)
Discussion started by: jermaine4ever
1 Replies

8. Shell Programming and Scripting

how to insert data into database by reading it from a text file??

Hi....can you guys help me out in this script?? Below is a text file and it contains these: GEF001 000093625 MKL002510 000001 000000 000000 000000 000000 000000 000001 GEF001 000093625 MKL003604 000001 000000 000000 000000 000000 000000 000001 GEF001 000093625 MKL005675 000001... (4 Replies)
Discussion started by: pallavishetty
4 Replies

9. Shell Programming and Scripting

Adding specific text and spaces to each line in a text file

Hi, I wanted to add specific text to each row in a text file containing three rows. Example: 0 8 7 6 5 5 7 8 9 0 7 9 7 8 9 0 1 2 And I want to add a 21 at the beginning of the first row, and blank spaces at the beginning of the second two rows. To get this: 21 0 8 7 6 5 5 7 8... (4 Replies)
Discussion started by: hertingm
4 Replies

10. Shell Programming and Scripting

reading specific line from file

Hi all... I not a expert unix script programmer, Kindly adjust. My requirement is that, i have a file which contains the about 10 lines - say 1 2 3 ... 8 war of the worlds: => text in this line 9 9000,80,78,77,334,445 => this line contains some numbers separted by commas 10 ... (10 Replies)
Discussion started by: cool_boss2121
10 Replies
Login or Register to Ask a Question