This is your version, cleaned up so it works, along with test results (test file shown below).
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:
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.
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."
fails because there is no preceding operand to match one or more times, just as there is none in your regexp ( "+" ).
and this:
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
Thanks a lot for all your explanations and efforts. As you had rightly pointed out, I need not grep for blank lines having specified the field separator as '+'. Also, I missed to escape the metacharacter. This cleaned up code works fine:
Thanks a lot for all your explanations and efforts. As you had rightly pointed out, I need not grep for blank lines having specified the field separator as '+'. Also, I missed to escape the metacharacter. This cleaned up code works fine:
According to the useless use of cat web page that you refer to:
"Briefly, here's the collected wisdom on using cat:
The purpose of cat is to concatenate (or "catenate") files. If it's only one file, concatenating it with nothing at all is a waste of time, and costs you a process."
By extension of the logic in that argument, ANY use of cat is a useless use of cat since you can concatenate files (the purpose of cat, per the above quote) using only awk (per the below example) without costing yourself a process. In fact, this is true of most Unix commands that you would normally pipe the output of "cat file" to so perhaps they should just remove the cat command from Unix entirely for being redundant and, therefore, unnecessary?
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)
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)
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)
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)
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)
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)
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)
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)