5

私は2つのファイル、aaとbbを持っています:

 $ cat aa 
84 xxx
85 xxx
10101 sdf
10301 23

 $ cat bb
82 asd
83 asf
84 asdfasdf
10101 22232
10301 llll

私はjoinコマンドを使用してそれらを結合します:

 $ join aa bb
84 xxx asdfasdf

しかし、予想されるのは、84、10101、および10301がすべて参加していることです。なぜ84人しか参加していないのですか?

4

3 に答える 3

9

数値ソートではなく、辞書式ソートを使用してください。

プロセスの一部としてこれを行うには:

$ join <(sort aa) <(sort bb)

これにより、次の出力が得られます。

10101 sdf 22232
10301 23 llll
84 xxx asdfasdf
于 2012-05-14T14:12:55.057 に答える
7

エラーメッセージが出力されるという事実を含めることができませんでした:

$ join aa bb
join: file 2 is not in sorted order
84 xxx asdfasdf
join: file 1 is not in sorted order

通常の辞書式ソートを使用できます。

join <(sort aa) <(sort bb) | sort -k1,1n
于 2012-05-14T14:14:55.763 に答える
3

並べ替えを避けたい場合は、awk を使用してゼロ パディングを行うことができます。

join \
 <(awk '{printf("%05d %s\n", $1, $2)}' aa) \
 <(awk '{printf("%05d %s\n", $1, $2)}' bb) \
| awk '{print int($1),$2,$3}'

元の並べ替え順序を保持する次の出力を生成します。

84 xxx asdfasdf
10101 sdf 22232
10301 23 llll

Unix のソートは O(n log n) であるため、ソートを避けたいと考えています。

于 2015-01-29T14:11:51.060 に答える