From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on dcvr.yhbt.net X-Spam-Level: X-Spam-ASN: AS22989 209.51.188.0/24 X-Spam-Status: No, score=-3.8 required=3.0 tests=AWL,BAYES_00,DKIM_INVALID, DKIM_SIGNED,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI, NICE_REPLY_A,RCVD_IN_DNSWL_HI,RCVD_IN_MSPIKE_H4,RCVD_IN_MSPIKE_WL, SPF_HELO_PASS,SPF_PASS shortcircuit=no autolearn=ham autolearn_force=no version=3.4.2 Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by dcvr.yhbt.net (Postfix) with ESMTPS id B6C7E1F4B4 for ; Tue, 6 Apr 2021 01:02:11 +0000 (UTC) Received: from localhost ([::1]:44822 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1lTa6c-0004Ix-8D for normalperson@yhbt.net; Mon, 05 Apr 2021 21:02:10 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:33504) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lTa6Y-0004In-Th for bug-gnulib@gnu.org; Mon, 05 Apr 2021 21:02:06 -0400 Received: from mo4-p00-ob.smtp.rzone.de ([85.215.255.22]:16483) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lTa6W-0004hO-0Q for bug-gnulib@gnu.org; Mon, 05 Apr 2021 21:02:06 -0400 ARC-Seal: i=1; a=rsa-sha256; t=1617670918; cv=none; d=strato.com; s=strato-dkim-0002; b=RE1P551UDXUsa6E9SXZomII3mlPM30zuklYbIIJiTN8WYEIPsz1aOtF7VmKR5w5Pyq d36wugGdFF4Q/b49eZwXQywGzSbbNz8Eeoq0vJGRLX16wPdH04Uy4j8lcjnFn9a12J44 08PHEhSSrz12KVILJTU4gF2tnXIsBGUikreZTysV7Tn42ttSg1Q+XcjhcY+omwdzYNaO dJV4H33eOyHKCE3xA2NaMuif4be6Pjgk7K3F+FxK35CHLLiAqIYpI4wRuHvjisMnn33w Y0KHgZ6i+PYLAWl3cGfS8X3ddzm2cW14u/jpolTKQPc1U3R0eQjQFr+6Suj8H4YIE1FV +Yfw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; t=1617670918; s=strato-dkim-0002; d=strato.com; h=References:In-Reply-To:Message-ID:Date:Subject:Cc:To:From:Cc:Date: From:Subject:Sender; bh=QHlsqP7DOMe/gdhIV4C6sWDaD5sWzOawumzJ1A6Zq+M=; b=ahB+DoSOA/lzAK6kEDkvdq7gwSmY0/pnq4WwppDQb1etpQhHJN9dE2etaVztrJGHvR Q3ZaSJ7j/q+91uUZ6mFUj51a7ApEkBllP3asgqnUsfRkXzsB8CoxzO6oVXKY8LNWy+uu DphrKPu9L1uAfvxjiIIr+G9zYrYEwXO+BMUhgHQeky7HeyB6SgIkZqAy07WuMhBdlvii vzHH7l5EDxvlAWvFSranUY/wIdGaVODWdHoDB2kebtacXBME+PfswHn8CBEdhXarUyDw W2bGCFk/0r40/ojJnZdN28/VpuWcSZp+gWllb2nlf7UVXKMdiE/1g3zjqZLOWOCiLciY WVGQ== ARC-Authentication-Results: i=1; strato.com; dkim=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; t=1617670918; s=strato-dkim-0002; d=clisp.org; h=References:In-Reply-To:Message-ID:Date:Subject:Cc:To:From:Cc:Date: From:Subject:Sender; bh=QHlsqP7DOMe/gdhIV4C6sWDaD5sWzOawumzJ1A6Zq+M=; b=T6PMVZGXZ7sVpGy9UrQpOsVHZ7neXX99f/Lc+rgrOyrLJiXlfytTdLfYVgSbP7HL7d tnrRhVOlP/CbHqQ29Q8Gebu2cJUtUEI1zi/MIn5+yPDLv2qZaX0LZGmmKcuNaqACldYu G6GboghpSwzZiz+vicWNp6/QkBkb9/BIgQfEm+vj8ThQEpEQN2d/ee/lX6jb1TrLMfNK KWV+ve8glQEt4LfVCdvjX58vH8cCHCMXfIZ+XW4ijRfOEQY/3HYpSbgH7gCybQBC9f1l CXcz8BXwlevO3480p8l8t+vf1ughColgSBN1LnBgy8iuLT1e24iky4bicLFNdMTZ8qLy D24A== Authentication-Results: strato.com; dkim=none X-RZG-AUTH: ":Ln4Re0+Ic/6oZXR1YgKryK8brlshOcZlIWs+iCP5vnk6shH+AHjwLuWOHqf0y5JW" X-RZG-CLASS-ID: mo00 Received: from bruno.haible.de by smtp.strato.de (RZmta 47.23.1 DYNA|AUTH) with ESMTPSA id z01445x3611wfsj (using TLSv1 with cipher ECDHE-RSA-AES256-SHA (curve X9_62_prime256v1 with 256 ECDH bits, eq. 3072 bits RSA)) (Client did not present a certificate); Tue, 6 Apr 2021 03:01:58 +0200 (CEST) From: Bruno Haible To: Bernhard Voelker Subject: Re: replacement for 'join'? Date: Tue, 06 Apr 2021 03:01:56 +0200 Message-ID: <4047831.tr10h9zKrZ@omega> User-Agent: KMail/5.1.3 (Linux/4.4.0-206-generic; KDE/5.18.0; x86_64; ; ) In-Reply-To: References: <50552954.mN77GqLXbc@omega> MIME-Version: 1.0 Content-Transfer-Encoding: 7Bit Content-Type: text/plain; charset="us-ascii" Received-SPF: none client-ip=85.215.255.22; envelope-from=bruno@clisp.org; helo=mo4-p00-ob.smtp.rzone.de X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, NICE_REPLY_A=-0.001, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H3=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_HELO_PASS=-0.001, SPF_NONE=0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: bug-gnulib@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Gnulib discussion list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: bug-gnulib@gnu.org Errors-To: bug-gnulib-bounces+normalperson=yhbt.net@gnu.org Sender: "bug-gnulib" Hi Berny, > > join -v 1 FILE1 FILE2 > > Maybe awk? > > $ awk -v keyfile=file2 ' > BEGIN { while ((getline < keyfile) > 0) k[$1]=1 } > !k[$1] > ' file1 > or > > $ awk ' > keys { k[$1]=1; next } > !k[$1] > ' keys=1 file2 keys=0 file1 Wonderful! Thank you. Both solutions work fine with the 'awk' on Alpine Linux (BusyBox v1.32.1). > To be honest, I'm not sure whether the variable assignment on the command line > or getline in a BEGIN block is more portable. As Alpine Linux is the only platform that lacks 'join', awk portability is not an issue (so far). Bruno