Please explain this simple AWK example


 
Thread Tools Search this Thread
Top Forums UNIX for Dummies Questions & Answers Please explain this simple AWK example
# 1  
Old 02-28-2011
Please explain this simple AWK example

Code:
awk '!_[$0]++'

Most importantly, I want to know what the underscore does "!_"

But ideally, please breakdown the whole thing. It is supposed to remove duplicate lines when found in a file.
# 2  
Old 02-28-2011
The _ is an array name. You can change it to whatever valid identifier name you like - !my_awk_array[$0]++ would be the same.

! is a logical negation: NOT my_awk_array[$1]++

The expression !my_awk_array[$1]++ uses the current value of the array my_awk_array with a key $1, it goes like this:
Code:
zsh-4.3.11[t]% printf '%s\n'  a b a b a | awk '{ print "$1 is:", $1, "my_awk_array[$1]++ is:", my_awk_array[$1]++ }'
$1 is: a my_awk_array[$1]++ is: 0
$1 is: b my_awk_array[$1]++ is: 0
$1 is: a my_awk_array[$1]++ is: 1
$1 is: b my_awk_array[$1]++ is: 1
$1 is: a my_awk_array[$1]++ is: 2

So a post-incremented array element has the value 0 only the first time we see a value.

So how we get only unique values with the code above?

1. We have 0 only the first time we see a value.
2. 0 gets evaluated to false in Boolean expressions.
3. NOT false returns true, so we get only those records.

Makes sense?
This User Gave Thanks to radoulov For This Post:
 
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. UNIX for Beginners Questions & Answers

Please explain the use of quotes in awk command in below example-

Example: `abc.ksh | grep '^GLIS'| awk -F' ' '{print \$1}'`; (3 Replies)
Discussion started by: Tanu
3 Replies

2. Shell Programming and Scripting

Please explain AWK Fibonnaci for loop

Referring to this: #!/bin/awk -f BEGIN{ for(i=0;i<=10;i++) { if (i <=1 ) { x=0; y=1; print i; } else { z=x+y; print z; x=y; y=z; } } (3 Replies)
Discussion started by: p1ne
3 Replies

3. Shell Programming and Scripting

Explain awk

I have 2 files recevied abc def ghi totallist abc 123 jasdhfaj def 345 fjdgkfsfh ghi 567 dfjdhdhfj jkl 678 djkahfdjshdf xyz 984 jdfdhfhdh myOutputFile jkl 678 djkahfdjshdf xyz 984 jdfdhfhdh I used this command for the output : awk 'FNR==NR {f1;next} !($1 in f1)' recevied... (2 Replies)
Discussion started by: nani1984
2 Replies

4. Shell Programming and Scripting

Explain this awk

found this handy one liner in another thread which is closed, it does what i need but im trying to understand it. it basically matches the field that contains the value v and prints its position awk -F, '{for(i=1;i<=NF;i++)if($i==v)print i}' v=yourfield inputfile my understanding is assign... (3 Replies)
Discussion started by: jack.bauer
3 Replies

5. Shell Programming and Scripting

Can Any people explain this awk command

Dear all , Can any people explain this awk command? What is the purpose of if (v++){b=$i;$i=""}? awk -F, '{for (i=1;i<=NF;i++){if (v++){b=$i;$i=""}};print $0} END { print "dups are" ;for ( i in b) print i}' OFS="," input_file This script is used to replace column duplicate value ... (1 Reply)
Discussion started by: eldonlck
1 Replies

6. Shell Programming and Scripting

Please explain what this Awk code is doing

Hi Guys, Please help me, I am new to programming and I don’t understand what some parts of this code are doing. I have comments on the parts I know, please help if my understanding of the code is not correct and also help with parts with questions. awk ' { gsub( ">",... (1 Reply)
Discussion started by: James_Owen
1 Replies

7. Shell Programming and Scripting

Explain this AWK script plz

Hi frnds, one my frnds has given resolution for my problem as below. it working great , but i couldnt understand somethings in the script. Why ++ operator after the function calling. how these each block working. will each run for each input line sequencially or one block for all the lines... (9 Replies)
Discussion started by: Gopal_Engg
9 Replies

8. Shell Programming and Scripting

AWK - HELP pls explain this ?

echo "23.54" | awk ' function round(A) { return int( A + 0.5 ) } { printf("%d\n",round($1)); }'> > > > > > awk: syntax error near line 2 awk: bailing out near line 2 (2 Replies)
Discussion started by: santosh1234
2 Replies

9. Shell Programming and Scripting

plese explain awk '{print \$NF}'

please explain this awk '{print \$NF}' i have a command grep -i adding /logs/eap | grep -iv equation | awk '{print \$NF}' | sort -u | sed 's/\.\$//' >> /temp/t please explain the above awk and sed as well how it works and also what is \$NF (1 Reply)
Discussion started by: mail2sant
1 Replies

10. Shell Programming and Scripting

Explain awk

Hi, I found this command in this forum, but, couldnt understand much from it. could any one help me understand that??? the commands are : awk '{sub(/ ~/,""); printf $0 ($0~/\|$/?ORS:"")}' file1 > file2 awk '{sub(/~ */,x);printf $0(/\|$/?ORS:x)}' awk '{sub(/~ */,x);sub(/\|$/, "|\n")}8'... (4 Replies)
Discussion started by: hitmansilentass
4 Replies
Login or Register to Ask a Question