我有兩個文件,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加入?
我有兩個文件,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加入?
使用詞典排序而不是數字排序。
要做到這一點作爲這一進程的一部分:
$ join <(sort aa) <(sort bb)
這使輸出:
10101 sdf 22232
10301 23 llll
84 xxx asdfasdf
是否加入支持數字命令? – qiuxiafei
@qiuxiafei不,加入不支持數字命令。 –
你沒有包括事實的錯誤消息是輸出:
$ 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
不是所有的實現都會出現這個錯誤 - 有些只是默默地失敗。 –
如果你想避免排序,那麼你可以填零使用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)。
@qiuxafei編輯了問題的標記 - 連接不是bash的一部分,而是可從任何shell訪問的標準UNIX工具。 –