Solved

Using gawk to read and manipulate multiple texts from a file

Posted on 2016-10-09
1
66 Views
Last Modified: 2016-10-16
OS is AIX

The first part of the program check if the input  of a  particular date and group name exist in a text file. The input values need to match on that entire record in the text file. This process is similar to SQL  where clause statement.

The second part  of the program display an error message and exit the loop if there isn't a match or else continue if there is a match.  The  date format needs to change from mm/dd/yyyy to mm/dd/yy in the output of results.  The input variable n limit the number  of records that are displayed.

I'm getting an error message when I run my code. Error message: too many errors to read.

a)   Input variables in the code are
        group=hasasvmi
        date1=09/29/2016
         n=1

b)  The following is the data in the text file
       Example 1:  data in k_2016.09.29.txt :


/dev/sasdwk/hasasvmi 128 1 127  0% /sasdwk/hasasvmi  2016.09.29_11.30.27

c)   The following is an example  of the results that I want to display:



Filesystem                          GBks    Free    Used     used%                     Mt                                Date          Time
/dev/sasdwk/hasasvmi     128       1          127         0%        /sasdwk/hasasvmi        09/29/16     11:30


Here is my code:

group=hasasvmi
date1=09/29/2016
n=1
|{
read "$group"
read "$date1"
read "$n"

DISKINFO=tail $n" k_%Y.%M.%D.txt

  while IFS='' read $line

      do

        group=hasasvmi
        date1=09/29/2016

       f1='grep ^"f1" $line | awk '{print $1}''
       f2='grep ^"f2" $line | awk '{print $2}''
       f3='grep ^"f3" $line | awk '{print $3}''
       f4='grep ^"f4" $line | awk '{print $4}''
       f5='grep ^"f5" $line | awk '{print $5}''
       f6='grep ^"f5" $line | awk '{print $6}''

       If  grp= echo( $grep "$group" "$line") &&
       f7= echo ('grep " $date1" | date2= (date +%m/%d/%Y | gawk  "$line" 'BEGIN {FS=". _" OFS="/"} {print $7}'')
       && f8= (date +"%H:%M" | gawk "line" 'BEGIN {FS="_ ." OFS="."} {print $7}'')
       Then
         continue
            printf '\tFileSystem%s\tGBks%d%s\t Free%d%s\tused%d %s\tused%%s\ tMt %s\ tDate%s\ tTime%s\n'     
                   "$f1" "$f2" "$f3" "$f4" "$f5"  "$f6" "$f7" 
        else
             echo '$grp ' doesn't exist (exit)|| echo  '$f7' doesn't match the date on file for'$grp' (exit)

    fi

done <"$DISKINFO"

}

Open in new window

0
Comment
Question by:dfn48
1 Comment
 
LVL 77

Accepted Solution

by:
arnold earned 500 total points
ID: 41836196
What is the forma of the data you are trying to process?
If it spans multiple lines,  you need to define a multi-line match pattern, the other option is to combine the data into a single line and then perform the match.
I've not master the multi-line pattern match, so I tend to based on the pattern combine the multi-line data set into a single line and then match the data I am looking for.
I use perl for such purposes, you can use gawk, but I think you have to perform all the tests within versus reading a line by line in bash passing a line at a time to multiple grep Checks...

Your primary test igor span two lines meaning the first match might not be met effectively missing the data point.
0

Featured Post

Free Tool: IP Lookup

Get more info about an IP address or domain name, such as organization, abuse contacts and geolocation.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

In tuning file systems on the Solaris Operating System, changing some parameters of a file system usually destroys the data on it. For instance, changing the cache segment block size in the volume of a T3 requires that you delete the existing volu…
Installing FreeBSD… FreeBSD is a darling of an operating system. The stability and usability make it a clear choice for servers and desktops (for the cunning). Savvy?  The Ports collection makes available every popular FOSS application and packag…
Learn how to navigate the file tree with the shell. Use pwd to print the current working directory: Use ls to list a directory's contents: Use cd to change to a new directory: Use wildcards instead of typing out long directory names: Use ../ to move…
This video shows how to set up a shell script to accept a positional parameter when called, pass that to a SQL script, accept the output from the statement back and then manipulate it in the Shell.

839 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question