On 29/03/2022 09:07, Iago-lito wrote:
Hello,

      This is a follow-up to this (yet) unanswered post on SE U&L:
https://unix.stackexchange.com/q/696259/87656, which I'm cross-posting
here. Don't hesitate to fire if it's the wrong place.

With the following two simple files:

|a.txt|

|1 a 2 b 5 c |

|b.txt|

|2 x 4 y 5 z |

The following command does not behave like expected:

|$ join -a 1 -a 2 -e 0 a.txt b.txt 1 a 2 b x 4 y 5 c z |

I would expect the option |-e 0| to fill up missing values with zeroes.
However, the following does work:

|$ join -a 1 -a 2 -e 0 -o auto a.txt b.txt 1 a 0 2 b x 4 0 y 5 c z |

Reading documentation from |$ man join|, I see no connection between
|-o| and |-e| that would make the above behaviour meaningful. Instead, I
find it misleading that a useless |-o auto| needs to be inserted into my
command for |-e 0| to work..

Is there an explanation, to be clarified in the manpage? Or is it a bug?


The info doc is clearer that the output of missing fields need to be
explicitly enabled, https://www.gnu.org/software/coreutils/join :

  ‘-e STRING’
     Replace those output fields that are missing in the input with
     STRING.  I.e., missing fields specified with the ‘-12jo’ options.
I agree that the man page should mention this also,
which I've done in the attached.

Marking this as done.
thanks,
Pádraig

From 120ce321d5f768c00b9e193af4edd5ccceaa45e0 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?P=C3=A1draig=20Brady?= <p...@draigbrady.com>
Date: Tue, 29 Mar 2022 16:34:10 +0100
Subject: [PATCH] doc: join: clarify that -e only effective for -12jo fields

* src/join.c (usage): Clarify that -e is not sufficient
to enable output of missing fields from one of the inputs.
Rather the -12jo options are required to explicitly
enable output of those fields.
Fixes https://bugs.gnu.org/54625
---
 src/join.c | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

diff --git a/src/join.c b/src/join.c
index 3d62ca43a..f2fd1727b 100644
--- a/src/join.c
+++ b/src/join.c
@@ -206,7 +206,11 @@ When FILE1 or FILE2 (not both) is -, read standard input.\n\
 \n\
   -a FILENUM             also print unpairable lines from file FILENUM, where\n\
                            FILENUM is 1 or 2, corresponding to FILE1 or FILE2\n\
-  -e EMPTY               replace missing input fields with EMPTY\n\
+"), stdout);
+      fputs (_("\
+  -e STRING              replace missing (empty) input fields with STRING;\n\
+                           I.e., missing fields specified with '-12jo' options\
+\n\
 "), stdout);
       fputs (_("\
   -i, --ignore-case      ignore differences in case when comparing fields\n\
-- 
2.26.2

Reply via email to