awk malfunction


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting awk malfunction
# 8  
Old 05-15-2016
So what changed between when it was working and when it stopped working? Did the script change? Or, did the data change? It has to be one of these (unless it is both)!

As I said before, there is no place in your data change contains the string C00 that appears as a word by itself in your sample data.
This User Gave Thanks to Don Cragun For This Post:
# 9  
Old 05-15-2016
maybe this command can be altered to take into account the searching of multiple patterns and have it be efficient

Code:
awk '/C00/ {++c} END{print "C00="c}' test.log

here we're only searching for one pattern.

suppose i want to search a 70MB file for multiple different patterns.

i would like to run a version of this command so the output i get is something similar to this:

Code:
awk '/C00|NHHA|MATKA|NORI|ERROR|FAILURE|SEGFAULT/ {++c} END{print "C00="c}' test.log

C00=33 NHHA=3 MATKA=45 NORI=3 ERROR=11 FAILURE=2 SEGFAULT=1 ...and so on

---------- Post updated at 03:02 AM ---------- Previous update was at 03:01 AM ----------

Quote:
Originally Posted by Don Cragun
So what changed between when it was working and when it stopped working? Did the script change? Or, did the data change? It has to be one of these (unless it is both)!

As I said before, there is no place in your data change contains the string C00 that appears as a word by itself in your sample data.
i dont know what happened. still trying to figure that out.
# 10  
Old 05-15-2016
You can't count the number of lines that contain one or more of seven patterns (incrementing one variable and using a single ERE match) and then magically determine how many lines contained any particular one of those seven patterns.

The script I suggested with the printf feeding data into awk changed to:
Code:
printf '%s\n' C00 NHHA MATKA NORI ERROR FAILURE SEGFAULT

should give you what you want pretty efficiently. The following is probably slightly faster:
Code:
awk '
/C00/ {++c}
/NHHA/ {++nh}
/MATKA/ {++m}
/NORI/ {++no}
/ERROR/ {++e}
/FAILURE/ {++f}
/SEGFAULT/ {++s}
END {print "C00="c, "NHHA="nh, "MATKA="m, "NORI="no, "ERROR="e, "FAILURE="f, "SEGFAULT="s}
' test.log

Again, this is assuming that you want to search every line (while the code you showed us before ignored the first input line). Is there a header line in your input file that needs to be skipped?

And, are you trying to count the number of lines containing these strings? (That is what the code above does.) Or, are you trying to count the number of appearances of these strings? (Which would need to use calls to gsub() as was done in the script you showed us before.)
This User Gave Thanks to Don Cragun For This Post:
# 11  
Old 05-15-2016
Assign zero to each search at the beginning ...
Code:
awk '
BEGIN{c=nh=m=no=e=f=s=0}
/C00/ {++c}
/NHHA/ {++nh}
/MATKA/ {++m}
/NORI/ {++no}
/ERROR/ {++e}
/FAILURE/ {++f}
/SEGFAULT/ {++s}
END {print "C00="c, "NHHA="nh, "MATKA="m, "NORI="no, "ERROR="e, "FAILURE="f, "SEGFAULT="s}
' test.log

... so you can get an output with zero for each entry with no match in the file, if you want.
Code:
C00=4 NHHA=0 MATKA=0 NORI=0 ERROR=0 FAILURE=0 SEGFAULT=0

These 2 Users Gave Thanks to Aia For This Post:
# 12  
Old 05-15-2016
Quote:
Originally Posted by Aia
Assign zero to each search at the beginning ...
Code:
awk '
BEGIN{c=nh=m=no=e=f=s=0}
/C00/ {++c}
/NHHA/ {++nh}
/MATKA/ {++m}
/NORI/ {++no}
/ERROR/ {++e}
/FAILURE/ {++f}
/SEGFAULT/ {++s}
END {print "C00="c, "NHHA="nh, "MATKA="m, "NORI="no, "ERROR="e, "FAILURE="f, "SEGFAULT="s}
' test.log

... so you can get an output with zero for each entry with no match in the file, if you want.
Code:
C00=4 NHHA=0 MATKA=0 NORI=0 ERROR=0 FAILURE=0 SEGFAULT=0

Ouch. Yes. Or use printf instead of print to display the results (as I did in my earlier suggestion):
Code:
printf("c00=%d NHHA=%d MATKA=%d NORI=%d ERROR=%d FAILURE=%d SEGFAULT=%d\n",c,nh,m,no,e,f,s)

This User Gave Thanks to Don Cragun For This Post:
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

awk output yields error: awk:can't open job_name (Autosys)

Good evening, Im newbie at unix specially with awk From an scheduler program called Autosys i want to extract some data reading an inputfile that comprises jobs names, then formating the output to columns for example 1. This is the inputfile: $ more MapaRep.txt ds_extra_nikira_usuarios... (18 Replies)
Discussion started by: alexcol
18 Replies

2. Shell Programming and Scripting

Passing awk variable argument to a script which is being called inside awk

consider the script below sh /opt/hqe/hqapi1-client-5.0.0/bin/hqapi.sh alert list --host=localhost --port=7443 --user=hqadmin --password=hqadmin --secure=true >/tmp/alerts.xml awk -F'' '{for(i=1;i<=NF;i++){ if($i=="Alert id") { if(id!="") if(dt!=""){ cmd="sh someScript.sh... (2 Replies)
Discussion started by: vivek d r
2 Replies

3. Shell Programming and Scripting

ksh passing to awk multiple dyanamic variables awk -v

Using ksh to call a function which has awk script embedded. It parses a long two element list file, filled with text numbers (I want column 2, beginning no sooner than line 45, that's the only known thing) . It's unknown where to start or end the data collection, dynamic variables will be used. ... (1 Reply)
Discussion started by: highnthemnts
1 Replies

4. Shell Programming and Scripting

HELP with AWK one-liner. Need to employ an If condition inside AWK to check for array variable ?

Hello experts, I'm stuck with this script for three days now. Here's what i need. I need to split a large delimited (,) file into 2 files based on the value present in the last field. Samp: Something.csv bca,adc,asdf,123,12C bca,adc,asdf,123,13C def,adc,asdf,123,12A I need this split... (6 Replies)
Discussion started by: shell_boy23
6 Replies

5. Shell Programming and Scripting

awk command to compare a file with set of files in a directory using 'awk'

Hi, I have a situation to compare one file, say file1.txt with a set of files in directory.The directory contains more than 100 files. To be more precise, the requirement is to compare the first field of file1.txt with the first field in all the files in the directory.The files in the... (10 Replies)
Discussion started by: anandek
10 Replies

6. Shell Programming and Scripting

Problem with awk awk: program limit exceeded: sprintf buffer size=1020

Hi I have many problems with a script. I have a script that formats a text file but always prints the same error when i try to execute it The code is that: { if (NF==17){ print $0 }else{ fields=NF; all=$0; while... (2 Replies)
Discussion started by: fate
2 Replies

7. Shell Programming and Scripting

Awk error -- awk: 0602-562 Field $() is not correct.

typeset -i i=1 while read -r filename; do Splitfile=`$Targetfile_$i.txt` awk 'substr($0,1,5) == substr($filename,1,5) && substr($0,526,2) == substr($filename,6,2) && substr($0,750,12) == substr($filename,8,12)' $SourceFilename >> $Splitfile i=i+1 done < /tmp/list.out I am using this logic... (1 Reply)
Discussion started by: pukars4u
1 Replies

8. Shell Programming and Scripting

awk: assign variable with -v didn't work in awk filter

I want to filter 2nd column = 2 using awk $ cat t 1 2 2 4 $ VAR=2 #variable worked in print $ cat t | awk -v ID=$VAR ' { print ID}' 2 2 # but variable didn't work in awk filter $ cat t | awk -v ID=$VAR '$2~/ID/ { print $0}' (2 Replies)
Discussion started by: honglus
2 Replies

9. Shell Programming and Scripting

scripting/awk help : awk sum output is not comming in regular format. Pls advise.

Hi Experts, I am adding a column of numbers with awk , however not getting correct output: # awk '{sum+=$1} END {print sum}' datafile 2.15291e+06 How can I getthe output like : 2152910 Thank you.. # awk '{sum+=$1} END {print sum}' datafile 2.15079e+06 (3 Replies)
Discussion started by: rveri
3 Replies

10. Shell Programming and Scripting

Awk problem: How to express the single quote(') by using awk print function

Actually I got a list of file end with *.txt I want to use the same command apply to all the *.txt Thus I try to find out the fastest way to write those same command in a script and then want to let them run automatics. For example: I got the file below: file1.txt file2.txt file3.txt... (4 Replies)
Discussion started by: patrick87
4 Replies
Login or Register to Ask a Question