Sponsored Content
Top Forums Shell Programming and Scripting Reading and writing in same file Post 302698485 by Don Cragun on Monday 10th of September 2012 06:40:00 AM
Old 09-10-2012
The command lines you have shown with the two sample lines you have shown from your log files don't come close to providing the data that you say they will. I also note that your last post (message #11 in this thread) is the first time you mention anything about log file field #10 being used to determine the final report.

I have tried to interpret your requirements and come up with a script that should come close to what you have said you need. Given that you have only let us see one complete log file line and one abbreviated log file line, I have low confidence that this will actually do what you want, but I believe it meets the requirements you've been willing to share.

To try it out, save the following script in a file named match2:
Code:
#!/bin/ksh
# match2 -- Produce report from log files
#
# Usage: match2 keyId_value output_file log_file...

Usage="Usage: %s keyId_value output_file log_file...
    Output records are created for every unique input record with field 14
    that is \"keyId=keyId_value\".  The output records contain fields 2,
    5, and 14 from the selected input records.  If input field 5 is
    \"none11111\", \"none11111\" will be replaced by the contents of field 5
    in any other record in the log files that has the same value in
    field 12 as field 12 in the selected input record that does not have
    \"none11111\" in field 5.  Output records will be sorted by performing
    a numeric sort on the first output field.  The sorted output will be
    written to the file named by \"output_file\" (or to standard output
    if \"output_file\" is \"-\".\n"

base="$(basename "$0")"
if [ $# -lt 3 ]
then    printf "$Usage" "$base" >&2
        exit 1
fi
matchId_value="$1"
if [ X"$2" = "X-" ]
then    cmd="sort -n -u"
else    cmd="sort -n -u -o \"$2\""
fi
# Shift away the keyId_value and output_file operands that have already
# been saved.  This leaves just the log_file operands in "$@".
shift 2
awk -v base="$base" -v cmd="$cmd" -v link="linkId=$matchId_value" 'BEGIN {
        # Indicates exit code to use if not 0
        ec = ""
        # Set output field separator to a comma.
        OFS = ","
        # Value in field 5 indicating the the correct value is unknown.
        unknown = "none11111"
}
$14 == link {
        # Gather data for an output record for this keyId...
        # o1[x] and o2[x] are output fields 1 and 2; output field 3 is
        # a constant (link), so it does not need to be preserved from
        # each line.  nm[x] contains the "id=" fields needed to find a
        # matching record for records that did not have a valid field 5
        # when the log entry was created...
        o1[NR] = $2
        if($5 == unknown) nm[NR] = $12
        else    o2[NR] = $5
        next
}
$5 != unknown  && ( $10 == "page" || $10 == "clk" ) {
        # Save a field 5 value for the id specified by field 12...
        id[$12] = $5
}
END {   # Fill in the missing o2[x] output fields...
        for (i in nm) if((o2[i] = id[nm[i]]) == "") {
                # Set o2[x] to the unknown value if no matching field
                # was found, and set the final exit code to indicate
                # that at least one entry had no match.
                o2[i] = unknown
                printf("%s: No valid field 5 found for %s\n", base, nm[i])
                ec = 2
        }
        # Write and sort the completed output records.
        for (i in o1) {
                print o1[i],o2[i],link | cmd
        }
        exit ec
}' "$@" >&2
exit

Make it executable by running the command:
Code:
chmod +x match2

and invoke it with:
Code:
match2 1ddoic output_file abc-2012-10-01_000*

to produce a report containing log file entries found in the log files you specified for linkId=1ddoic sorted by timestamp in the file named output_file.

Although this script specifies ksh, it should also work with sh and bash. (It won't work with csh or tcsh.)

I hope this helps.
 

10 More Discussions You Might Find Interesting

1. Programming

Reading and Writing file on LAN

Hi gurus I am not a C programmer but I need to read and write files on a computer on LAN using IP address. Suppose on a computer that has an IP 192.168.0.2 Any help or code example. I did in JAVA using URL, but do not know how to do in ANSI-C. In java: ------- URL url = new... (3 Replies)
Discussion started by: lucky001
3 Replies

2. UNIX for Advanced & Expert Users

Reading a file and writing the file name to a param file.

Hi All, Not sure if this would be in a dummies sectiin or advanced. I'm looking for a script if someone has doen something like this. I have list of files - adc_earnedpoints.20070630.txt adc_earnedpoints.20070707.txt adc_earnedpoints.20070714.txt adc_earnedpoints.20070721.txt... (1 Reply)
Discussion started by: thebeginer
1 Replies

3. UNIX for Dummies Questions & Answers

reading ,writing,appending ,manipulating a file.

Hi my prob statement is to create a new file or to append to the 1tst file the followign chages. File 1: txt file. portfolio No a b c d abc 1 Any Any Any charString cds 2 values values values charString efd 3 can can can charString fdg 4 come come come charString... (4 Replies)
Discussion started by: szchmaltz
4 Replies

4. UNIX for Dummies Questions & Answers

Log File Writing and Reading

Hi all, I have the following shell script code which tries to sftp and writes the log into the log file. TestConnection () { echo 'Connection to ' $DESTUSERNAME@$DESTHOSTNAME $SETDEBUG if ]; then rm $SCRIPT ; fi touch $SCRIPT echo "cd" $REMOTEDIR >> $SCRIPT echo "quit" >>... (10 Replies)
Discussion started by: valluvan
10 Replies

5. Programming

I need help with file reading/writing in C

Hello everybody, I'm trying to code a program which makes the following: It sends an ARP request frame and when it gets the reply, extracts the IP address of source and writes it to a .txt file. This is gonna be done with many hosts (with a for() loop), so, the text file would look like... (2 Replies)
Discussion started by: Zykl0n-B
2 Replies

6. Shell Programming and Scripting

Reading data from DataBase and Writing to a file

Hi All, Please help me in writing data to a file in one row. In database there is a column which contains large data which does not fit in the file in one row. The column contains list of paths. I want to write these paths to a file in one row. Please find the code below writes : ... (2 Replies)
Discussion started by: rajeshorpu
2 Replies

7. Shell Programming and Scripting

Searching for Log / Bad file and Reading and writing to a flat file

Need to develop a unix shell script for the below requirement and I need your assistance: 1) search for file.log and file.bad file in a directory and read them 2) pull out "Load_Start_Time", "Data_File_Name", "Error_Type" from log file 4) concatinate each row from bad file as... (3 Replies)
Discussion started by: mlpathir
3 Replies

8. Programming

unexpected values received when writing and reading from file

In the code below i try to write and read from a file, but i get unexpected results, like after writing i cannot open the file, and when reading the file the value entered earlier is not shown bool creat_fragments(int nFragment) { int fd, rand_value; char frag_path, buf; for(int... (8 Replies)
Discussion started by: saman_glorious
8 Replies

9. Shell Programming and Scripting

reading a file extracting information writing to a file

Hi I am trying to extract information out of a file but keep getting grep cant open errors the code is below: #bash #extract orders with blank address details # # obtain the current date # set today to the current date ccyymmdd format today=`date +%c%m%d | cut -c24-31` echo... (8 Replies)
Discussion started by: Bruble
8 Replies

10. Shell Programming and Scripting

Reading and Writing a conf file - Suggestions and improvements?

Hello all As part of my TUI - (line based) Text User Interface, i do have 2 commands to assist working with conf files. Now, for me they work, but since i wrote them, i automaticly use them they way they should be used... you know what i mean. ;) Anyway, they are designed to read 'simple'... (3 Replies)
Discussion started by: sea
3 Replies
All times are GMT -4. The time now is 03:04 AM.
Unix & Linux Forums Content Copyright 1993-2022. All Rights Reserved.
Privacy Policy