Sponsored Content
Full Discussion: Problem with awk syntax
Top Forums Shell Programming and Scripting Problem with awk syntax Post 302522880 by Blytsplyk on Tuesday 17th of May 2011 12:53:15 AM
Old 05-17-2011
This is your version, cleaned up so it works, along with test results (test file shown below).
Code:
cat test | awk -F"+" '
{
   if ( $0 ~ /^$/ )
   {
   }
   else
   {
      if ( $0 ~ /^[0-9+-]+$/ )
      {
         if ( $0 ~ /\+/ )
         {print $0}
      }
   }
}'
+1
0+1
1+


Personally, I'd just go with the following, which yields almost the same results, but which could easily altered to yield the exact same results, as what you had (after it was cleaned up), and it is much simpler to read:

# Looking for numbers with a '+' in front of of trailing them, as you might see in a mathematical expression), which matches the output you get in my cleaned up version of your code:
Code:
awk '/\+[0-9]/ || /[0-9]\+/' test
+1
 0+1
 1+
let x=x+1

You did not state whether your input file contained 'statements' such as the above let statement but, if it does, your version will not find them because you are 'anchoring' your regular expression to the beginning and end of the line. Also, your version will not match numbers which contain trailing spaces, which I did not demonstrate in my example but which you can easily test yourself.

Code:
cat test
+1
0+1
1
a
+a
1+
a+
let x=x+1

What went wrong with what your code? The answer is that the '+' is a metacharacter in regular expressions and it must be escaped with a backslash if you want to look for a literal plus sign. (The line just before the print statement in your code.)

According to the Posix regexp standards, + "Matches the preceding element one or more times."

Code:
awk '/+[0-9]/' test
awk: line 1: regular expression compile failed (missing operand)
+[0-9]

fails because there is no preceding operand to match one or more times, just as there is none in your regexp ( "+" ).

and this:
Code:
awk '/[0-9]+/' test
+1
0+1
1
1+

does not fail but does not yield the desired results because, according to the Posix definition, '1' is matched one or more times and we are not looking for a literal '+'.

Other things that didn't go wrong yet because your script failed before it could reach them:

You are attempting to call grep and egrep from within your awk script but you cannot do that without using the awk system call, nor do you need to since awk understands regular expressions.

While it is syntactically correct, I'm not really sure why you are changing the awk field separator to a '+' sign and only applying your logic to 'non-blank' lines. With a properly structured regular expression, as the example above demonstrates, only the lines you are interested in are printed and none of that is required

Last edited by Franklin52; 05-17-2011 at 03:42 AM.. Reason: Please use code tags, thank you
 

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

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

7. 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

8. 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

9. 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

10. Shell Programming and Scripting

awk problem with syntax

awk -v sw="lemons|dogs" 'NR>100 && NR<200 BEGIN { c=split(sw,a,""); } { for (w in a) { if ($0 ~ a) d]++; } } END { for (i in a) { o=o (a"="(d]?d]:0)","); } sub(",*$","",o); print o; }' /home/jahitt/data.txt what am i doing wrong with the above code? im pretty sure the issue is in the... (6 Replies)
Discussion started by: SkySmart
6 Replies
All times are GMT -4. The time now is 01:58 PM.
Unix & Linux Forums Content Copyright 1993-2022. All Rights Reserved.
Privacy Policy