2016-04-24 7 views
0

以下の2つのリストに基づいて最終的な名前リストを作成するためにどのようなUNIXコマンド/ユーティリティを使用できますか?これはSET操作を行うようなものです。しかし、主な比較はNameList1でなければなりません。 NameList2に余分な名前がある場合は、マスターリストに含めないでください。unixコマンドは、セット操作と同等のリスト比較を実行します。

注:ソート(アルファベット順など)することはできません。私はリストのトップに、私が既に提供しているように、列の位置(自然順序)を維持する必要があります。ご協力いただきありがとうございます。

NameList1:

Joe 
John 
Mary 
Mike 
Allan 
David 
Andrew 
Matt 

NameList2:

Joe 
John 
Mary 
George 
Jeff 
Allan 
David 
Andrew 
Frank 

私はサイド・バイ・サイドでdiffを行う場合は、比較を見ることができます比較。これと同じように:

-bash-4.1$ diff --side-by-side NameList1.txt NameList2.txt 
Joe        Joe 
John        John 
Mary        Mary 
Mike         | George 
            > Jeff 
Allan        Allan 
David        David 
Andrew        Andrew 
Matt         | Frank 

私の最終的なリストのために期待される結果は、次のようになります。George, Jeff, FrankがNameList1から削除され

Joe 
John 
Mary 
Mike 
Allan 
David 
Andrew 
Matt 

。この最終的なリストをどのようにプロダクト化できますか?より良いツールコマンドがありますか? diffを正しく使用していますか?

+0

あなたのリスト1と同じ結果ですか? – haifzhan

+0

あなたの問題は明確に定義されていません。 –

+0

私の「マスター」リストに記載されているように私は生産する必要があります。したがって、NameList2にあるNameList1にないものは、NameList1から削除します。 – noober

答えて

1

これは、単純なjoinコマンドを使用して達成できます。私のMacで は、以下が期待される結果にLinuxの

join -a1 NameList1 NameList2

>  -a file_number 
>     In addition to the default output, produce a line for each 
>     unpairable line in file file_number. 

編集

を与え、--no-checkorderオプションは、入力にソート順序を確認し避けるだろう。

join -a1 --nocheck-order NameList1 NameList2

+0

これはうまくいきますが、出力は 'join:file 2はソート順ではありません.'、 'join:file1はソート順ではありません。 ' – noober

+0

Macではこのメッセージが表示されません。警告を抑制するスイッチがあるかもしれませんか? 'man join'を見てください –

+0

ああ...あなたはそれが動作するマックの上にいます。しかし、私はcentOS 6を実行しており、私はmanページでそれを抑圧することはできません。 – noober

関連する問題