Eu suponho que seus arquivos grandes já estão classificados. O método a seguir não requer mais classificação.
Você pode simplesmente adicionar zeros à esquerda para as chaves, usando sed
... Como o processo é pipeline, não há arquivos temporários para lidar. A sobrecarga de sed
é trivial.
# make key 9 digits # Add 9 leading 0's # Remove excess 0's
join -a1 -11 <(sed -r 's/^([0-9]+)/000000000/; s/^0+([0-9]{9})//' file1) \
<(sed -r 's/^([0-9]+)/000000000/; s/^0+([0-9]{9})//' file2)
A saída é:
000000001 lkj klj lkj
000000002 lkj lkj lkj
000000003
000000004
000000005
000000006
000000007 lkj lkj lkj
000000008
000000009
000000010
000000011 lkk kll lkk
Se você não quiser os zeros à esquerda na saída, use este comando no lugar.
O extra sed -r 's/^0+//'
remove zeros à esquerda.
join -a1 -11 <(sed -r 's/^([0-9]+)/000000000/;s/^0+([0-9]{9})//' file1) \
<(sed -r 's/^([0-9]+)/000000000/;s/^0+([0-9]{9})//' file2) |
sed -r 's/^0+//'
Saída
1 lkj klj lkj
2 lkj lkj lkj
3
4
5
6
7 lkj lkj lkj
8
9
10
11 lkk kll lkk