2

私はSolarisUnixに取り組んでいます。私は2つのファイルを持っています:

> cat temp
2
8
6
> cat temp2
1
2
3
4
5
6
7
8
9
> 

今、私はtempに存在するtemp2のすべての行が必要です:私はこれに出くわし、以下のコマンドを試しました。

> nawk 'FNR==NR{a[$0];next}($1 in a)' temp temp2
2
6
8
>

これは完璧に機能しました。次に、joinを使用する方法もここで見ました。ここ では、「フィールド番号を明示的に指定しない場合、デフォルトでは、joinコマンドは最初のフィールドのファイルと一致します」と書かれています。私が与えるならjoin temp temp2私は得るでしょう

2
6
8

しかし、ここに私が得たものがあります!

> join temp temp2
2
8
>

デフォルトで結合が最初の列と一致する場合、なぜここで6が欠落しているのか誰かに教えてもらえますか?

4

2 に答える 2

6

joinそれらを一致させるために実行する前にファイルをソートする必要があります。

それは以下を使用して行うことができます:

join <(sort temp) <(sort temp2)

そして私の出力は次のとおりです。

2
6
8
于 2013-01-03T07:10:12.180 に答える
2

commも適切なツールですが、ソートされたファイルも必要です。

comm -12 <(sort temp) <(sort temp2)

bashまたはkshで動作します

于 2013-01-03T11:50:02.673 に答える