![]() |
awk - syntax error
I'm learning awk and wrote a simple test program. The desired operation is to read a file of words and output only those which...
- are five characters long - have the same letter in position 2 and 5. A sample input file... Quote:
Quote:
Code:
cat < $InFile \Daniel B. Martin |
Very close! How about this:
Code:
cat < $InFile | \ |
Hi.
For learning purposes here is another solution Code:
$ awk -F '' 'NF==5 && $2==$5' infile.txt NF -- number of fields; in this case -- length of words. $2, $5 -- second and 5th character in the string. EDIT: 1) Note that if there are no action "{...}" after a pattern (or logical expression) then, by default, awk assumes '{print $0;}' 2) from info gawk: Quote:
|
Quote:
I made the next step by parameterizing this line. Code:
# Parameterize the word length and "must match" character positions.Daniel B. Martin |
Quote:
I made the next step by parameterizing this line. Code:
# Parameterize the word length and "must match" character positions.Daniel B. Martin |
Hi.
Quote:
Code:
$ awk -v WL=5 -v p1=2 -v p2=5 '{ if (length==WL && substr($0,p1,1)==substr($0,p2,1)) print}' infile.txt I'd like to dissuade you from writing awk programs in C (as well as C++ programs in C etc) :) IMHO, each language has it own preferable thought patterns, and you should learn them, not only the syntax. In case of awk, typically, you should think of input data as a sequence of records, each one consists of fields. Using this simple paradigm you can move mountains! |
AWK- Syntax errror
Hi,
I have just started with unix and today started learning awk, this is my first post on this forum and do not know where to start a new thread so posting on this thrad. Problem Details: I tried to run the follwing command ls -l | grep -v total | awk '{ print size is $5 bytes for $2 }' and it showed me this error: syntax error The source line is 1. The error context is { print size is $5 bytes >>> for <<< $2 } awk: The statement cannot be correctly parsed. The source line is 1. while if I running this command : ls -l | grep -v total | awk '{ print size is $5 }' , it runs successfully with output as: 164 17146-rw-r--r-- 1 goyalank users 164 Mar 7 09:20 email -rw-r--r-- 1 goyalank users 17146 Mar 7 13:49 task To mention the detail the output of ls -l is : -rw-r--r-- 1 goyalank users 164 Mar 7 09:20 email -rw-r--r-- 1 goyalank users 17146 Mar 7 13:49 task Any help is appreciable. |
Hi.
You should quote literal strings, like this: Code:
ls -l | grep -v total | awk '{ print "size is "$5" bytes for "$2 }' |
awk syntax
Thanks a ton! That worked......
Can you also tell the step to create a new thead for a particular problem like the one I faced below....thanks again in advance. |
Quote:
|
| All times are GMT -5. The time now is 06:08 PM. |