在unix中对大文件进行排序

在unix中对大文件进行排序

我有一个这样的文件

chr1    101466461   101466462   1
chr6    160143888   160143889   1
chr19   19231081    19231082    1
chr18   47008735    47008736    1
chr1    161407811   161407812   1
chr4    2957295 2957296 2
chr12   49449119    49449120    1
chr7    99698936    99698937    45
chr1    17555949    17555950    1
chr17   47995738    47995739    1
chr12   77244463    77244464    1
chr20   45846426    45846427    1
chr8    103667756   103667757   1
chrX    3733206 3733207 3
chr19   17711889    17711890    3
chr1    202930379   202930380   1
chr17   62654249    62654250    2
chr11   118560806   118560807   1
chr19   12808650    12808651    2
chr2    61738736    61738737    1
chr12   8121782 8121783 1
chr22   30769375    30769376    1
chr15   50866284    50866285    1
chr8    128412986   128412987   2
chr17   63118510    63118511    2
chr17   27169311    27169312    1
chr2    25125404    25125405    1
chr13   26752444    26752445    2
chr17   79828654    79828655    1
chr16   89713556    89713557    3
chr6    43478242    43478243    1
chr17   79507720    79507721    37
chr2    10251911    10251912    1
chr2    99942853    99942854    1
chr6    30766751    30766752    1
chr2    241401259   241401260   1
chr7    150020595   150020596   2

我想对第一列进行排序,然后对第二列进行排序,然后对第三列进行排序。

如何使用unix中的sort命令来做到这一点?

输出应该是这样的

chr1    17555949    17555950    1
chr1    19585241    19585242    1
chr1    45140053    45140054    5
chr1    68656642    68656643    1
chr1    78408443    78408444    1
chr1    101466461   101466462   1
chr1    118882121   118882122   1
chr1    161407811   161407812   1
chr1    173830786   173830787   1
chr1    202930379   202930380   1
chr10   104223811   104223812   2
chr11   3377667 3377668 9
chr11   6337670 6337671 2
chr11   27524981    27524982    3
chr11   59373319    59373320    1
chr11   62322454    62322455    4
chr11   71149264    71149265    1
chr11   118560806   118560807   1
chr12   6776535 6776536 1
chr12   7083123 7083124 2
chr12   8121782 8121783 1
chr12   49449119    49449120    1
chr12   77244463    77244464    1
chr12   120729137   120729138   2
chr13   26752444    26752445    2
chr14   20826276    20826277    1
chr14   69838752    69838753    1
chr15   50866284    50866285    1
chr15   51841232    51841233    1
chr16   4431159 4431160 1
chr16   4871325 4871326 1
chr16   89713556    89713557    3
chr17   27169311    27169312    1
chr17   36924117    36924118    1
chr17   47995738    47995739    1
chr17   62654249    62654250    2
chr17   63118510    63118511    2
chr17   73873221    73873222    2
chr17   74083467    74083468    1
chr17   78105045    78105046    3
chr17   79507720    79507721    37
chr17   79828654    79828655    1
chr18   43534443    43534444    1
chr18   47008735    47008736    1
chr18   47794477    47794478    1
chr19   1606323 1606324 1
chr19   5691538 5691539 1
chr19   9929712 9929713 7
chr19   10421898    10421899    2
chr19   12808650    12808651    2
chr19   17711889    17711890    3
chr19   19231081    19231082    1
chr19   40853760    40853761    5
chr19   43994590    43994591    1
chr19   45924611    45924612    1
chr19   47977071    47977072    1
chr2    10251911    10251912    1
chr2    25125404    25125405    1
chr2    37362203    37362204    1
chr2    55277977    55277978    1
chr2    61738736    61738737    1
chr2    99942853    99942854    1
chr2    241401259   241401260   1
chr20   34230317    34230318    1
chr20   37053658    37053659    1
chr20   45846426    45846427    1
chr21   23526366    23526367    1
chr22   16145568    16145569    1
chr22   29119862    29119863    1
chr22   30712166    30712167    10
chr22   30769375    30769376    1
chr3    43711238    43711239    2
chr3    48633350    48633351    3
chr3    119389625   119389626   2
chr3    169796731   169796732   1
chr4    2957295 2957296 2
chr4    8440974 8440975 1
chr4    71554018    71554019    2
chr5    43477728    43477729    2
chr6    17988241    17988242    1
chr6    30653492    30653493    1
chr6    30766751    30766752    1
chr6    43478242    43478243    1
chr6    160143888   160143889   1
chr7    83789825    83789826    1
chr7    99058375    99058376    2
chr7    99698936    99698937    45
chr7    129222997   129222998   2
chr7    150020595   150020596   2
chr8    103667756   103667757   1
chr8    128412986   128412987   2
chr8    144601536   144601537   1
chr9    123631184   123631185   1
chr9    131411417   131411418   1
chr9    135216510   135216511   1
chr9    136278984   136278985   2
chrX    3733206 3733207 3
chrX    115589585   115589586   1
chrX    122866375   122866376   2
chrX    153279158   153279159   2

谢谢

答案1

使用 GNU 实现sort

sort -V foo

来自man sortGNU 系统:

   -V, --version-sort
          natural sort of (version) numbers within text

例子

cat foo

chr1    101466461   101466462   1
chr6    160143888   160143889   1
chr19   19231081    19231082    1
chr18   47008735    47008736    1
chr1    161407811   161407812   1
chr4    2957295 2957296 2
chr12   49449119    49449120    1
chr7    99698936    99698937    45
chr1    17555949    17555950    1
chr17   47995738    47995739    1
chr12   77244463    77244464    1
chr20   45846426    45846427    1
chr8    103667756   103667757   1
chrX    3733206 3733207 3
chr19   17711889    17711890    3
chr1    202930379   202930380   1
chr17   62654249    62654250    2
chr11   118560806   118560807   1
chr19   12808650    12808651    2
chr2    61738736    61738737    1
chr12   8121782 8121783 1
chr22   30769375    30769376    1
chr15   50866284    50866285    1
chr8    128412986   128412987   2
chr17   63118510    63118511    2
chr17   27169311    27169312    1
chr2    25125404    25125405    1
chr13   26752444    26752445    2
chr17   79828654    79828655    1
chr16   89713556    89713557    3
chr6    43478242    43478243    1
chr17   79507720    79507721    37
chr2    10251911    10251912    1
chr2    99942853    99942854    1
chr6    30766751    30766752    1
chr2    241401259   241401260   1
chr7    150020595   150020596   2

sort -V foo

chr1    17555949    17555950    1
chr1    101466461   101466462   1
chr1    161407811   161407812   1
chr1    202930379   202930380   1
chr2    10251911    10251912    1
chr2    25125404    25125405    1
chr2    61738736    61738737    1
chr2    99942853    99942854    1
chr2    241401259   241401260   1
chr4    2957295 2957296 2
chr6    30766751    30766752    1
chr6    43478242    43478243    1
chr6    160143888   160143889   1
chr7    99698936    99698937    45
chr7    150020595   150020596   2
chr8    103667756   103667757   1
chr8    128412986   128412987   2
chr11   118560806   118560807   1
chr12   8121782 8121783 1
chr12   49449119    49449120    1
chr12   77244463    77244464    1
chr13   26752444    26752445    2
chr15   50866284    50866285    1
chr16   89713556    89713557    3
chr17   27169311    27169312    1
chr17   47995738    47995739    1
chr17   62654249    62654250    2
chr17   63118510    63118511    2
chr17   79507720    79507721    37
chr17   79828654    79828655    1
chr18   47008735    47008736    1
chr19   12808650    12808651    2
chr19   17711889    17711890    3
chr19   19231081    19231082    1
chr20   45846426    45846427    1
chr22   30769375    30769376    1
chrX    3733206 3733207 3

答案2

通过执行以下命令:

LC_COLLATE=C sort -k1,1 -k2,2n -k3,3n -k4,4n file

我得到了您想要的确切输出:

chr1    17555949    17555950    1
chr1    101466461   101466462   1
chr1    161407811   161407812   1
chr1    202930379   202930380   1
chr11   118560806   118560807   1
chr12   8121782 8121783 1
chr12   49449119    49449120    1
chr12   77244463    77244464    1
chr13   26752444    26752445    2
chr15   50866284    50866285    1
chr16   89713556    89713557    3
chr17   27169311    27169312    1
chr17   47995738    47995739    1
chr17   62654249    62654250    2
chr17   63118510    63118511    2
chr17   79507720    79507721    37
chr17   79828654    79828655    1
chr18   47008735    47008736    1
chr19   12808650    12808651    2
chr19   17711889    17711890    3
chr19   19231081    19231082    1
chr2    10251911    10251912    1
chr2    25125404    25125405    1
chr2    61738736    61738737    1
chr2    99942853    99942854    1
chr2    241401259   241401260   1
chr20   45846426    45846427    1
chr22   30769375    30769376    1
chr4    2957295 2957296 2
chr6    30766751    30766752    1
chr6    43478242    43478243    1
chr6    160143888   160143889   1
chr7    99698936    99698937    45
chr7    150020595   150020596   2
chr8    103667756   103667757   1
chr8    128412986   128412987   2
chrX    3733206 3733207 3

相关内容