join(1) on Solnix vs Linux and the BSDs
On Solnix, join is the illumos join at /usr/bin/join. It is the traditional POSIX join: the first synopsis uses -1/-2/-a/-v, and the second keeps the old -j, -j1 and -j2 as normal options. GNU extras such as -i, -z, --header and --check-order are not in the Solnix page.
The manual pages
- Solnix: join(1) from
pkgs.solnix.illumos-world-man· illumos.org - Linux: join(1) coreutils-full-9.11
- FreeBSD: join(1) 15.1-RELEASE
- OpenBSD: join(1) 8.0
- NetBSD: join(1) 11.0
- Standard: POSIX.1-2024 (IEEE Std 1003.1-2024),
join
What Solnix runs
A default Solnix system runs the illumos join at /usr/bin/join, from pkgs.solnix.illumos-world-man. No other variants are shipped. The Linux page in the bundle is GNU coreutils join, which is a different program.
Differences
| Compared with | Topic | What differs |
|---|---|---|
| Linux | GNU-only options | Linux (GNU) join has -i/--ignore-case, -z/--zero-terminated, --header, --check-order and --nocheck-order. The Solnix page documents none of them, so scripts using them need a different approach on Solnix.Source: Linux join(1) -i, -z, --header, --check-order, --nocheck-order; Solnix join(1) SYNOPSIS and OPTIONS |
| Linux | -o auto | Linux join accepts the keyword auto for -o FORMAT, so the first line of each file sets the number of output fields. The Solnix -o list takes only filenumber.fieldnumber elements or 0.Source: Linux join(1) DESCRIPTION (FORMAT 'auto'); Solnix join(1) -o |
| Linux | -v meaning | Solnix -v filenumber outputs only the unpairable lines of that file. Linux describes -v as like -a but suppressing joined lines. Solnix -v 1 -v 2 together output all unpairable lines.Source: Solnix join(1) -v; Linux join(1) -v |
| Linux | unsorted input | Solnix says the results are unspecified if input is not in collating order, and offers no order check. Linux says a warning is given if the input is unsorted and some lines cannot be joined, and offers --check-order.Source: Solnix join(1) DESCRIPTION, OPERANDS; Linux join(1) DESCRIPTION (Important), --check-order |
| FreeBSD, OpenBSD, NetBSD | -j, -j1, -j2 status | Solnix documents -j, -j1 and -j2 as ordinary options in a second synopsis. FreeBSD, OpenBSD and NetBSD list them only as historic compatibility options that 'should not be used'. NetBSD's synopsis also shows -j taking two arguments, file_number and field.Source: Solnix join(1) SYNOPSIS, OPTIONS -j; FreeBSD join(1) COMPATIBILITY; OpenBSD join(1) STANDARDS; NetBSD join(1) SYNOPSIS, COMPATIBILITY |
| FreeBSD, OpenBSD, NetBSD | -a without an argument | On FreeBSD, OpenBSD and NetBSD, a bare -a outputs unpairable lines from both files. On Solnix, -a always takes a filenumber, and -a 1 with -a 2 gives the same result.Source: Solnix join(1) -a; FreeBSD join(1) COMPATIBILITY -a; OpenBSD join(1) STANDARDS -a; NetBSD join(1) COMPATIBILITY -a |
| NetBSD | space after -a | NetBSD requires that the argument to -a is not preceded by a space, so write -a1. The Solnix page documents -a filenumber and shows a form with a space.Source: NetBSD join(1) -a, COMPATIBILITY; Solnix join(1) -a |
| NetBSD | -o and the join field | Solnix -o accepts 0 for the join field, and the common field is not printed unless requested. The NetBSD -o description lists only file_number.field elements. FreeBSD, OpenBSD and Solnix all document 0.Source: Solnix join(1) -o; NetBSD join(1) -o; FreeBSD join(1) -o; OpenBSD join(1) -o |
| FreeBSD, OpenBSD, NetBSD | -o separators and multiple arguments | FreeBSD, OpenBSD and NetBSD say -o list elements may be comma or whitespace separated, and call multiple arguments to one -o historic. The Solnix page does not say what separates list elements.Source: FreeBSD join(1) -o, COMPATIBILITY; OpenBSD join(1) -o; NetBSD join(1) -o; Solnix join(1) -o |
Standards
- POSIX: join is a POSIX.1-2024 utility.
- Solnix: Interface Stability: Standard. CSI: Enabled.
- FreeBSD: The join command conforms to IEEE Std 1003.1-2001 (“POSIX.1”).
- OpenBSD: The join utility is compliant with the IEEE Std 1003.1-2008 (“POSIX.1”) specification.
- NetBSD: The join command is expected to be IEEE Std 1003.2 (“POSIX.2”) compatible.
- Linux: The Linux page in the bundle has no STANDARDS section.
Writing portable scripts
- Use
-1and-2instead of-j,-j1or-j2, and avoid a bare-aand multi-argument-o. The BSD pages call these historic options that should not be used. - Sort the inputs to match the join: sort
-bstyle when using default separators, plain sort when using-t. All the pages agree on this, and none of the BSD or Solnix pages offer an order check.
Every difference here is taken from the manual pages linked above: Solnix's published page, Linux (man-pages and the GNU and util-linux manuals), FreeBSD, OpenBSD and NetBSD. Each row names its source. Where a manual is silent, this page is too. Compiled 2026-10-26. Found a mistake? Mail hackers@lists.solnix.io.