nawk strange behavior


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting nawk strange behavior
# 1  
Old 05-20-2009
nawk strange behavior

Dear guys;
when deleting repeated lines using nawk as below ;
Why the below syntax works?

nawk ' !a[$1]++' infile > outfile


and when using the other below syntax the nawk doesn't work?

nawk ' { !a[$1]++ } ' infile > outfile
or
nawk '
{
!a[$1]++
} ' infile > outfile

BR
# 2  
Old 05-20-2009
You really should read some awk tutorial to get a grasp on how it works and what are the defaults.

awk 'expression'
is equivalent to
awk 'expression{print $0}'
which in turn means do print $0 when for the current line expression is true.

awk '{expression}'
is equivalent to
awk '1{expression}'
which in turn means do expression (this can have side effects or not) when for the current line 1 is true (that is for each and every line).
# 3  
Old 05-20-2009
nawk strange behavior

do you mean that the first expression is equivalent to
nawk ' {if (!a[$1]++) print $0}' infile > outfile

and the other expression is equivalent to
nawk '{ if (!a[$1]++) "do nothing"}' infile > outfile


Thanks colemar very much and kindly if you have any links to awk tutorial to provide me with Smilie

BR Smilie
# 4  
Old 05-20-2009
Explanation:

Code:
nawk '!a[$1]++'

1. If the value of the element a[$1] is empty, print $0
2. Increase the value of the element a[$1] with 1
3. Read next line

Code:
nawk '{ !a[$1]++ }'

1. Increase the value of the element of the array with 1, the ! doesn't have any meaning here and can be omitted
2. Read next line

Hope this helps
# 5  
Old 05-20-2009
The second is equivalent to:
nawk '{if (1) !a[$1]++}' infile > outfile
therefore it does nothing besides accessing the array a by the key $1 and incrementing the array element value.

AWK - Wikipedia, the free encyclopedia
Further reading
Login or Register to Ask a Question

Previous Thread | Next Thread

9 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Strange Ctrl+C behavior

Hello All, I have a strange issue. I've created a shell script which connects to RMAN (Oracle Recovery Manager) and executes full DB backup. I then executed this script with nohup and in the background: $ nohup my_script.sh > logfile.log 2>&1 &The issue is that when I tried to take a look into... (6 Replies)
Discussion started by: JackK
6 Replies

2. Shell Programming and Scripting

Strange behavior of grep

Hi All, I am facing a strange problem while grepping for a process. Here is the small script that i have written. It will look for any process running with the parameter passed to the script. If no process is running it should print appropriate message. $ cat t.ksh #!/bin/ksh set -x ... (9 Replies)
Discussion started by: veeresh_15
9 Replies

3. Shell Programming and Scripting

Strange behavior on one of my server

I am not sure what is wrong, but I have some strange behavior when printing things out. I do create a file with only one word test, no space, no new line etc. nano file<enter> test<ctrl x>y<enter> Server 1 gets (fail) awk '{print "+"$0"*"}' file *test Server 2 gets (OK) awk '{print... (9 Replies)
Discussion started by: Jotne
9 Replies

4. Red Hat

strange mail behavior

Hi I have script to to take backup and send mail to a group once a day. One strange behavior I have observed recently is that most of the time the mail we receive is fine . But someday it just sends out mail without any subject with undisclosed recipients. I dont know how to find the cause... (0 Replies)
Discussion started by: ningy
0 Replies

5. Ubuntu

Ubuntu strange behavior

It is so till login screen. I mean that when I boot my computer, Ubuntu shows a splash screen with mouse instead of Ubuntu logo and in the login screen it shows XUbuntu login screen... It began when I upgraded to previous kernel, I suppose, but I'm not sure... I can't say that it annoys me very... (6 Replies)
Discussion started by: Sapfeer
6 Replies

6. Programming

Strange behavior in C++

I have the following program: int main(int argc, char** argv){ unsigned long int mean=0; for(int i=1;i<10;i++){ mean+=poisson(12); cout<<mean<<endl; } cout<<"Sum of poisson: "<< mean; return 0; } when I run it, I get the... (4 Replies)
Discussion started by: santiagorf
4 Replies

7. Shell Programming and Scripting

Very Strange Behavior for redirection

I have searched far and wide for an explanation for some odd behavior for output redirection and haven't come up with anything. A co-worker was working on old scripts which have run for years and embedded in their code were output redirects which worked for the script during execution and then... (5 Replies)
Discussion started by: cahook
5 Replies

8. UNIX for Dummies Questions & Answers

Strange Behavior on COM2

Hi, I have a problem with a new touch screen controller that I am trying to use on a SCO 3.0 system. THe touch screen controller only wants to talk at 9600baud. I have updated /etc/inittab per the manual and also edited /usr/lib/event/devices to use 9600 baud. The only way I can get the... (0 Replies)
Discussion started by: Elwood51
0 Replies

9. UNIX for Dummies Questions & Answers

strange sed behavior

I have a file called products.kp which contains, for example, 12345678,1^M 87654321,2^M 13579123,3 when I run the command cat products.kp| sed -f kp.sed where kp.sed contains s,^M,, I get the output 12345678,1 87654321,2 13579123,3 (5 Replies)
Discussion started by: Kevin Pryke
5 Replies
Login or Register to Ask a Question