Sponsored Content
Full Discussion: awk problem with syntax
Top Forums Shell Programming and Scripting awk problem with syntax Post 302869037 by SkySmart on Tuesday 29th of October 2013 02:03:43 PM
Old 10-29-2013
Quote:
Originally Posted by Don Cragun
Yoda's fix will give you a working program that counts the number of lines from line number 101 through line number 199 that contain "lemons" and that contain "dogs" and print them at the end. But, you didn't tell us what this script is supposed to do.

Another way to read what you were trying to do would be print lines 101 through 199 from your input file and at the end print the number of lines in the entire file that contaied "dogs" and the number of lines in the entire file that contained "lemons". If that was your intent, the one character change marked in red below to your original script should work:
Code:
awk -v sw="lemons|dogs" 'NR>100 && NR<200;BEGIN { c=split(sw,a,"[|]"); } { for (w in a) { if ($0 ~ a[w]) d[a[w]]++; } }
END { for (i in a) { o=o (a[i]"="(d[a[i]]?d[a[i]]:0)","); }
  sub(",*$","",o); print o;
}' /home/jahitt/data.txt

Although I prefer more readable code like:
Code:
awk -v sw="lemons|dogs" '
NR>100 && NR<200
BEGIN { c=split(sw,a,"[|]")
}
{       for (w in a) {
                if ($0 ~ a[w])
                        d[a[w]]++
        }
}
END {   for (i in a) {
                o=o (a[i]"="(d[a[i]]?d[a[i]]:0)",")
        }
        sub(",*$","",o)
        print o
}' /home/jahitt/data.txt

If your input file contained:
Code:
lemons and dogs
lemons only
cats and dogs
dogs only
cats only
lemons and cats and dogs

the above scripts produce:
Code:
dogs=4,lemons=3

but the output order is unspecified.
your assumption is right on target! thank you.

i just thought of a different possibility, what happens if i want to exclude (for the string 'lemons') all lines that contain the word 'only'?

so in your output, if the lemon lines containing 'only' are excluded, then, the count should be:

Code:
dogs=4,lemons=2

 

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

syntax problem

dear friends, I have a large size file containg two fields data like this *** **** 122 222 ***** ***** ***** ***** 232 233 i have file like this. i want to remove blank lines from file . i think awk is servive this problem i wrote a awk command but the error is... (3 Replies)
Discussion started by: rajan_ka1
3 Replies

2. Shell Programming and Scripting

syntax problem

Dear friends, I am writing shell script in csh . i want to make arthimatic operation in csh. i wrote sysntax like this. set val = 230 set tmp = `0.1 * $val + 300` echo $tmp but it is not working . anyone please give me syntax. (3 Replies)
Discussion started by: rajan_ka1
3 Replies

3. Shell Programming and Scripting

remote awk syntax problem

Hi there If i run this command on my Linux box directly, i get the desired result # ipmitool fru | gawk '!NF{f=0}/mb.net0.fru/{f=1}/Product Serial/&&f{print $NF}' 00:AA:4F:A6:A6:C4 however, if i try to run it from a remote server (using SSH) and populating a variable with the result,... (5 Replies)
Discussion started by: hcclnoodles
5 Replies

4. Programming

Syntax Problem in Query

Hey guys, i am having a problem in my query statement. I am using Mysql in Netbeans and c++. What i am trying to do is for the user to enter a certain value and then the program will store the value into the database... string NewMovie ; Cout <<" Enter your new movie : " << endl ; ... (1 Reply)
Discussion started by: gregarion
1 Replies

5. Shell Programming and Scripting

Problem with syntax using awk

Hi Guys, When below code is executed in script, I get desired output in output file. awk 'NR >= $start_line && NR <= 3' master_scriptlist.txt > $driver1/scriptlist.txtBut when i replace 3 with a variable end_line=3, I do not get ouput. See code below. Is there any problem with syntax awk... (6 Replies)
Discussion started by: ajincoep
6 Replies

6. Shell Programming and Scripting

Problem with awk syntax

Hi, Below is the code I am using. I am trying to list only those numbers which has a + symbol in it cat num | awk -F"+" '{if (/^$/) { } else {if ( $0 ~ egrep "^+$" ) { if ( $0 ~ grep "+" ) {print $0} } }}' I am getting the following error: awk: 0602-521 There is a... (7 Replies)
Discussion started by: sudvishw
7 Replies

7. Shell Programming and Scripting

Syntax Problem with awk

Hello, I have perl script,which take some part of data in the file. the below command works fine in normal cmd prompt. `awk '/CDI/ && // && !/Result for/ {print $3 $5 > "final.txt"}' datalist.txt`; `nawk -F"" '{print $2}' finalcdi.txt`; But not working. Please use code tags, thanks. (5 Replies)
Discussion started by: rasingraj
5 Replies

8. Shell Programming and Scripting

Help with awk syntax error problem asking

Input file: 703 1192 720 1162 316 380 1810 439 1969 874 Desired output file: 3 3 awk code that I tried: (1 Reply)
Discussion started by: perl_beginner
1 Replies

9. Shell Programming and Scripting

Problem with if-else syntax

I'm calling the following if-else from nawk. But I keep getting an error at the "else". I've tried putting more brackets and ; but still I get complaints about the "else". Any ideas ? Thanks, wbrunc BEGIN { FS = "," ; OFS = "," } { if ( $8 ~ /A/ && $9 == B ) $1="4/29/2013" ; $2="J.Doe"... (2 Replies)
Discussion started by: wbrunc
2 Replies

10. Shell Programming and Scripting

awk syntax problem

Hi, I am using this awk command in my shell script : find . -name "*" -ctime -6 | xargs cat | grep -E -v ^fileName\|^\(\) | awk -v DATE="${CURR_DATE}" -v DATE_LOG=$DATE_SYS 'BEGIN {FS=";";OFS=";";CONVFMT="%.9g";OFMT="%.9g"}... (4 Replies)
Discussion started by: abhi1988sri
4 Replies
tail(1) 						      General Commands Manual							   tail(1)

NAME
tail - Writes a file to standard output, beginning at a specified point SYNOPSIS
tail [-f | -r] [-c number | -n number] [file] tail [+number | -number] [unit] [-f | -r] [file] The tail command writes the named file (standard input by default) to standard output, beginning at a point you specify. The second synopsis form of this command is obsolete, and support may be withdrawn at any time. STANDARDS
Interfaces documented on this reference page conform to industry standards as follows: tail: XCU5.0 Refer to the standards(5) reference page for more information about industry standards and associated tags. OPTIONS
Displays the remainder of the file from the starting point number where number is measured in bytes. The sign of number affects the loca- tion in the file at which to begin the copying: Copying begins relative to the beginning of the file. Copying begins relative to the end of the file. Copying begins relative to the end of the file. The origin for counting is 1, that is, -c +1 represents the first byte of the file, -c -1 the last. Does not end after it copies the last line of the input file if the input file is not read from a pipe, but enters an endless loop in which it sleeps for a sec- ond and then attempts to read and copy further records from the input file. Thus, it can be used to monitor the growth of a file being written by another process. Has no effect if specified with -r. Displays remainder of file from the starting point number where number is measured in lines. The sign of number affects the location in the file, measured in lines, to begin the copying: Copying begins relative to the beginning of the file. Copying begins relative to the end of the file. Copying begins relative to the end of the file. The origin for counting is 1, that is, -n +1 represents the first line of the file, -n -1 the last. [Tru64 UNIX] Causes tail to print lines from the end of the file in reverse order. The default for -r is to print the entire file this way. Overrides -f. Begins reading number lines (l), 512-byte blocks (b), kilobyte blocks (k), characters (c and m) from the end of the input. The m argument counts mulktibyte characters as single-byte characters, while c counts characters byte-by-byte but does not break mulk- tibyte characters. The default unit is l for lines. The default number is 10 for all units. Begins reading number lines (l), 512-byte blocks (b), 1-kilobyte blocks (k), or characters (c and m) from the beginning of the input. The m argument counts mulktibyte characters as sin- gle-byte characters, while c counts characters byte-by-byte but does not break mulktibyte characters. The default unit is l for lines. The default number is 10 for all units. In the non-obsolescent form, if you do not specify either -c or n, -n 10 is the default. DESCRIPTION
If you do not specify -f, -r, -number, or +number, tail begins reading 10 lines before the end of the file. The default starting point is - (end of input), l (lines) is the default unit, and 10 is the default number. By specifying +, you can direct tail to read from the beginning of the file. By specifying a number or a unit, or both, you can change the point at which tail begins reading. [Tru64 UNIX] The unit argument can specify lines, blocks, or characters. The tail command can begin reading number (10 by default) units from either the end or the beginning of the file. [Tru64 UNIX] The block size is either 512 bytes or 1 kilobyte. NOTES
When the input is a text file containing mulktibyte characters, use the -c option cautiously since the output produced may not start on a character boundary. EXIT STATUS
The following exit values are returned: Successful completion. An error occurred. EXAMPLES
To display the last 10 lines of a file named notes, enter: tail notes To specify how far from the end to start, enter: tail -20 notes This displays the last 20 lines of notes. To specify how far from the beginning to start, enter: tail +200c notes | more This displays notes a page at a time, starting with the 200th character from the beginning. To follow the growth of a file named accounts, enter: tail -1 -f accounts This displays the last line of accounts. Once every second, tail displays any lines that have been added to the file. This contin- ues until stopped by pressing the Interrupt key sequence. ENVIRONMENT VARIABLES
The following environment variables affect the execution of tail: Provides a default value for the internationalization variables that are unset or null. If LANG is unset or null, the corresponding value from the default locale is used. If any of the internationalization vari- ables contain an invalid setting, the utility behaves as if none of the variables had been defined. If set to a non-empty string value, overrides the values of all the other internationalization variables. Determines the locale for the interpretation of sequences of bytes of text data as characters (for example, single-byte as opposed to mulktibyte characters in arguments and input files). Determines the locale for the format and contents of diagnostic messages written to standard error. Determines the location of message catalogues for the processing of LC_MESSAGES. SEE ALSO
Commands: cat(1), head(1), more(1), page(1), pg(1) Standards: standards(5) tail(1)
All times are GMT -4. The time now is 11:07 AM.
Unix & Linux Forums Content Copyright 1993-2022. All Rights Reserved.
Privacy Policy