How to print only the unique lines in BASH?
Use sort
and uniq
:
sort inputfile | uniq -u
The -u
option would cause uniq
to print only unique lines. Quoting from man uniq
:
-u, --unique
only print unique lines
For your input, it'd produce:
eagle
forest
Obs: Remember to sort
before uniq -u
because uniq
operates on adjacent lines. So what uniq -u
actually does is to print lines that don't have identical neighbor lines, but that doesn't mean they are really unique. When you sort
, all the identical lines get grouped together and only the lines that are really unique in the file will remain after uniq -u
.
Using awk:
awk '{!seen[$0]++};END{for(i in seen) if(seen[i]==1)print i}' file
eagle
forest