uniq

At first glance, uniq appears to be a tool that displays only unique lines in a file. In reality, it strips consecutive repeated lines, but if the same line occurs later in the input, it will be displayed again. Therefore, a common combination is sort | uniq, although that can be done slightly more efficiently using the sort -u command, as there is no need to spawn a second process and set up the pipe between them.

It may seem like a fair question to ask what uniq is useful for, and the answer is that uniq is actually quite flexible in what it can do. In the previous chapter, uniq was used with the -w and -d flags to find only those entries that had duplicate checksums. The -w flag tells it to parse only the first 32 characters (which are the checksum; the rest will inevitably be different), and the -d flag (if the input data is sorted) lists only those items that are not unique. This is a very useful way to filter the results, which would be cumbersome and time-consuming in a for or while loop in a shell script.

warning.ai

The uniq command is also rather unique in that if passed a second filename on the command line, it will write the output to that file instead of to stdout, overwriting it if it already exists.

The complement of -d is -u; while uniq will normally print each line only once, with -u it will only print the unique lines; if an entry is listed twice, it will not be displayed ...

Get Shell Scripting: Expert Recipes for Linux, Bash, and More now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.