Parsing question.


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Parsing question.
# 1  
Old 11-05-2008
Parsing question.

Hi There,

First time poster here. I've got a parsing question and have a solution but am sure there is a much better way of doing this with just awk. My knowledge of awk is pretty limited so hope someone out there can give me a better solution. Here's the problem, I'm receiving a file from a vendor that is formatted like so:
INPUT:
###########################################################
################### 11/03/2008 #######################
###########################################################

FILE_NAME TRANSACTION COUNT
------------------------------ ---------------------------- ------------
TESTFILE_1 650 239
651_1 5
------------
244

TESTFILE_2 650 1
651_1 5
651_2 4
------------
10

TESTFILE_3 650 7
------------
7

TESTFILE_4 650 1
------------
1

I want the output to look like this:
TESTFILE_1 244
TESTFILE_2 10
TESTFILE_3 7
TESTFILE_4 1

Let's assume the filename will always have TESTFILE in it. The code I'm currently running now which works but has alot of assumptions is this:
#!/usr/bin/ksh
INPUT_FILE=$1
OUTPUT_FILE=${INPUT_FILE}.converted
rm $OUTPUT_FILE
touch $OUTPUT_FILE

NUM=0
for FILENAME in `cat $INPUT_FILE|grep TESTFILE|awk '{ print $1 }'`
do
FILENAME_ARRAY[$NUM]=$FILENAME
NUM=`expr $NUM + 1`
done
TOTAL_FILENAMES=$NUM

NUM=0
for TOTALS in `cat $INPUT_FILE|grep -v "^$"|grep -v "#"|grep -v "-"|grep -v "FILE_NAME"|grep -v "PEXODEM"|tr -s " "|awk -F" " 'NF == 1'`
do
TOTALS_ARRAY[$NUM]=$TOTALS
NUM=`expr $NUM + 1`
done
TOTAL_TOTALS=$NUM

if [ TOTAL_FILENAMES -ne $TOTAL_TOTALS ]; then
echo "Number of Files and Number of Totals don't match!"
exit 1
fi

NUM=0
while true
do
echo "${FILENAME_ARRAY[$NUM]} ${TOTALS_ARRAY[$NUM]}" >> $OUTPUT_FILE
NUM=`expr $NUM + 1`
if [ $NUM -eq $TOTAL_FILENAMES ]; then
break
fi
done

Someone's gotta have a more efficient way of accomplishing the same thing.

Thanks in advance,

EDIT: The formatting of the input file isn't really showing up correctly in the post but basically you have a filename called TESTFILE* and a record count. Some files have multiple sub files with a record count as well. Then you have a total records for that file and all it's sub files. I just want the filename and the total records for itself and all it's sub files.
# 2  
Old 11-05-2008
Try this:

Code:
awk '
/^TESTFILE_/{s=$1;next}
/----/ && s{getline;print s, $NF}
' file

Regards
# 3  
Old 11-05-2008
Quote:
Originally Posted by Franklin52
Try this:

Code:
awk '
/^TESTFILE_/{s=$1;next}
/----/ && s{getline;print s, $NF}
' file

Regards
Works beautifully. Wow, I really need to learn more about awk.

Thanks alot,
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Another parsing question (awk)

Input File Name of the session: filesrv_quo snap Logical Units UID: 60:06:01:60:01:7B:25:00:C8:86:B0:CA:5B:A2:E0:11 Name of the session: verspn2_at_176_0218 snap Logical Units UID: Name of the session: DRT-ny-iadsql1-c_ny-iadsql2-c snap Logical Units UID: ... (4 Replies)
Discussion started by: greycells
4 Replies

2. UNIX for Dummies Questions & Answers

Noob question about parsing a website

I'm trying to parse the website, finance.yahoo.com/q?s=ge&ql=1, and retrieve the info between <span id="yfs_l84_ge">18.98</span>, so 18.98. What would be the best way to go about this in a bash script? Any help or suggestions will be much appreciated. Thanks! (2 Replies)
Discussion started by: mayson
2 Replies

3. Shell Programming and Scripting

another parsing question

Input File Information about each HBA: HBA UID: 20:00:00:00:C9:9A:62:88:10:00:00:00:C9:9A:62:88 Server Name: 20:00:00:00:C9:9A:62:88:10:00:00:00:C9:9A:62:88 Server IP Address: UNKNOWN HBA Model Description: HBA Vendor Description: HBA Device Driver... (2 Replies)
Discussion started by: greycells
2 Replies

4. Shell Programming and Scripting

Question about argument parsing in scripts

Hello all, I am relatively new to linux and bash scripting. I have what seems to be a simple question but I'm having trouble finding the answer. The question is what is the difference between the variables $@ and $*. I've seen them both used in the same context, and I've tried a number of... (4 Replies)
Discussion started by: nicthu
4 Replies

5. Shell Programming and Scripting

Question about reading and parsing text file

Hello, I'm just getting started with BASH programming. I would like to write a script to solve a file renaming problem I have. I received a directory containing a collection (>2000) of files whose names are in DOS 8.3 format, and woild like to rename the filenames to a longer and more... (8 Replies)
Discussion started by: polomora
8 Replies

6. Shell Programming and Scripting

Perl parsing question

I need some help loading an array. I have two unique delimiters, but I keep running into recursion. #!/usr/bin/perl $INFILE="/root/scripts/data.txt"; $pat1="SCRIPT####"; $pat2="SCRIPT#echo"; $flag=0; $inc=0; $chunk=""; open(INFILE,"<$INFILE")|| die; while(<INFILE>) { if... (2 Replies)
Discussion started by: s_becker
2 Replies

7. Shell Programming and Scripting

Question about Awk for Data Parsing

Hi, I am doing some data parsing for some economics research. I was recently exposed to shell script and am brand new to awk. I have a large csv file (like 10G) and I would like to make it a lot smaller with awk, but it is a bit tricky for me and I haven't been able to get it yet. I would... (5 Replies)
Discussion started by: EconResearch
5 Replies

8. Shell Programming and Scripting

Parsing of file for Report Generation (String parsing and splitting)

Hey guys, I have this file generated by me... i want to create some HTML output from it. The problem is that i am really confused about how do I go about reading the file. The file is in the following format: TID1 Name1 ATime=xx AResult=yyy AExpected=yyy BTime=xx BResult=yyy... (8 Replies)
Discussion started by: umar.shaikh
8 Replies

9. Shell Programming and Scripting

Parsing question

Hi Guys, I was wondering if you could help me out - I have a directory /home/users/datafiles/ which contain files "dat dd-mm-yy.xls" I am trying to write a script which does the following - (1) loops through all the files (2) retrieves the dd-mm-yy string and converts it into a... (12 Replies)
Discussion started by: muser
12 Replies

10. UNIX for Dummies Questions & Answers

Text parsing question

How would I split a file based on the location of a string, basically I want all entries above the string unix in this example 1 2 3 4 unix 5 6 7 Thanks, Chuck (3 Replies)
Discussion started by: 98_1LE
3 Replies
Login or Register to Ask a Question