Sponsored Content
Full Discussion: Help Needed Using awk/CUT
Top Forums Shell Programming and Scripting Help Needed Using awk/CUT Post 302884815 by Don Cragun on Wednesday 22nd of January 2014 02:38:35 AM
Old 01-22-2014
I guess that I'm not surprised that code that was written to extract 4 left-justified fields from an input line doesn't correctly extract 6 fields (some left-justified and some right-justified) with completely different field alignments. If you give us sample input that is not representative of your real input, you're wasting all of our time. With your new sample input, the following updated awk script does something that I am guessing is closer to what you want, but (since you didn't show what the output should be), it is just a guess:
Code:
awk '
function extract_field(first, last,     string) {
        string = substr($0, first, last - first + 1)
        sub(/^ */, "", string)
        sub(/ *$/, "", string)
        return string == "" ? "-" : string
}
/^$/ {  next
}
/\t/ {  # Convert tabs in input to spaces assuming tab stops are set in columns
        # 9 + 8x.
        while(i = index($0, "\t")) $0 = substr($0, 1, i - 1) \
                sprintf("%.*s", 8 - (i - 1) % 8, "        ") substr($0, i + 1)
}
{       # At this point, field 1 is characters 1-32, field 2 is characters
        # 33-43, field 3 is characters 44-55, and field 4 is characters 56-62,
        # field 5 is characters 63-69, and field 6 is characters 70-EOL.  All
        # of these fields offsets are guesses based on provided sample input.
        printf("%s%s\n%s\n%s\n%s\n%s\n%s\n",
                oc++ ? "\n" : "",
                extract_field(1,32),
                extract_field(33,43),
                extract_field(44,55),
                extract_field(56,62),
                extract_field(63,69),
                extract_field(70,100))
}' testify.log2

When your new sample input is saved in a file named testify.log2, the above script produces the output:
Code:
db file scattered read
2,189,675
4,308
2
52.3
User I/O

DB CPU
-
2,854
-
34.6
-

direct path read
308,043
811
3
9.8
User I/O

PX Nsq: PQ load info query
950
189
199
2.3
Other

db file sequential read
215,085
165
1
2.0
User I/O

control file sequential read
105,321
127
1
8.1
System I/O

Of course, there are no tabs in the sample input you've shown us. And, if there is a tab at the end of each field but the last, your tab stops are not set at multiples of eight character boundaries.

Is that what you want?
This User Gave Thanks to Don Cragun For This Post:
 

10 More Discussions You Might Find Interesting

1. UNIX for Dummies Questions & Answers

cut help needed!!!!!

/home/documents/files/scooter17.dat I am trying to cut out everything upto scooter17.dat so that it will only print out the scooter17.dat any ideas? great advices will be greatly appreciated. Thank you ********Updated*************** Thank you for the replys. It works!!... (4 Replies)
Discussion started by: scooter17
4 Replies

2. UNIX for Dummies Questions & Answers

Cut help needed!!!!!!

cut help needed!!!!! -------------------------------------------------------------------------------- /home/documents/files/scooter17.dat I am trying to cut out everything upto scooter17.dat so that it will only print out the scooter17.dat any ideas? great advices will be greatly... (1 Reply)
Discussion started by: scooter17
1 Replies

3. Shell Programming and Scripting

[grep awk cut] > awk

Hi, I'm very new to scripting. grep $s $filename | awk '{print $2}' | cut -c 1-8 How can I optimize this using a single awk? I tried: awk '/$s/ {print $2}' $filename | cut -c 1-8 However didn't work, I think the awk is not recognizing $s and the verbal is something else. (6 Replies)
Discussion started by: firdousamir
6 Replies

4. Shell Programming and Scripting

awk or cut

select some fields from data file (source.csv) The data in file(source.csv) is like "x1,2",,"y",,"z" How to get the 1st, 2nd and 3rd field from the file. Using awk or cut? Note: "x1,2" is one field. thanks, (16 Replies)
Discussion started by: anypager
16 Replies

5. Shell Programming and Scripting

Is awk vs cut which one is better

i was trying to work on program to look for users never log on sever.. using awk with awk is working last| awk '{print $1}' |sort -u > /tmp/users1$$ cat /etc/passwd | awk -F: '{print $1}' |sort -u > /tmp/users2$$ comm -13 /tmp/users$$ rm -f /tmp/users$$ with cut it is not working ... (3 Replies)
Discussion started by: macrules
3 Replies

6. UNIX for Dummies Questions & Answers

Help please awk or cut

Hi I'm new to unix programming so struggling with something thats probably simple to many of you I have data files of the format : ID, date, value1, value2, blank on each line either value1 or value2 will be zero. I need my output file to contain ID, date, non-zero value The input... (3 Replies)
Discussion started by: thewench
3 Replies

7. Shell Programming and Scripting

HELP! using cut/awk

how would i write a shell script to show the number of lines in which int variable appears in a c++ program. how would i do this using cut or awk methods is it possbile and having a output similar to this x, number of apperances = y, number of apperances = (2 Replies)
Discussion started by: deadleg
2 Replies

8. Shell Programming and Scripting

Want to use awk instead of cut

I want to use awk instead of cut command. Following is my code: line="slNumber=US78AJF11643, slName=USJFKAAUSYDAAUL80441032900095, dummy sl found? sqlca.sqlcode=0" sl_WORD=`echo $line| cut -f 1 -d','` sl=`echo $sl_WORD | cut -f 2 -d'='` echo "$sl" Please suggest me about the code. ... (5 Replies)
Discussion started by: rinku
5 Replies

9. Shell Programming and Scripting

help with cut command needed

I have this file containing 8 veritcal lines and I need to cut the first two lines into a new file and then cut the next two lines into a new file and so on... any help would be much appreciated. I tried the cut -c but that doesnt work and I am not sure what else to try. Thanks. (1 Reply)
Discussion started by: drew211
1 Replies

10. Shell Programming and Scripting

Help Needed! - Cut characters after a text string and append to end of filename

Hi all.. I have several unique files that contain one thing in common, and that is acct#. For all files in the directory, I want to append the 10 characters following the word "ACCOUNT:" to the end of the filename. for example: I have file 111_123 that contains ACCOUNT:ABC1234567 The file... (5 Replies)
Discussion started by: cinderella1
5 Replies
IGAWK(1)							 Utility Commands							  IGAWK(1)

NAME
igawk - gawk with include files SYNOPSIS
igawk [ all gawk options ] -f program-file [ -- ] file ... igawk [ all gawk options ] [ -- ] program-text file ... DESCRIPTION
Igawk is a simple shell script that adds the ability to have ``include files'' to gawk(1). AWK programs for igawk are the same as for gawk, except that, in addition, you may have lines like @include getopt.awk in your program to include the file getopt.awk from either the current directory or one of the other directories in the search path. OPTIONS
See gawk(1) for a full description of the AWK language and the options that gawk supports. EXAMPLES
cat << EOF > test.awk @include getopt.awk BEGIN { while (getopt(ARGC, ARGV, "am:q") != -1) ... } EOF igawk -f test.awk SEE ALSO
gawk(1) Effective AWK Programming, Edition 1.0, published by the Free Software Foundation, 1995. AUTHOR
Arnold Robbins (arnold@skeeve.com). Free Software Foundation Nov 3 1999 IGAWK(1)
All times are GMT -4. The time now is 08:52 PM.
Unix & Linux Forums Content Copyright 1993-2022. All Rights Reserved.
Privacy Policy