Java 基于两列对大文件进行排序

Java 基于两列对大文件进行排序,java,linux,sorting,external,Java,Linux,Sorting,External,我有一个大文件,无法放入内存,我想排序。该文件由两列和多条记录组成。第一列为数字类型,约为10位,第二列为字符串,其中包含根据ASCII码排序的任何打印字符 我需要根据数字字段对记录进行排序,但如果两条记录具有相同的数字字段,我希望根据字符串(即第二列)进行排序 为此,我尝试使用LinuxSort进行排序,LinuxSort采用外部排序,但问题是它没有根据ASCII码对字符串进行排序。有什么想法吗 GNU排序实用程序根据当前区域设置进行排序。请参阅手册页上的注释: *** WARNING

我有一个大文件,无法放入内存,我想排序。该文件由两列和多条记录组成。第一列为数字类型,约为10位,第二列为字符串,其中包含根据ASCII码排序的任何打印字符

我需要根据数字字段对记录进行排序,但如果两条记录具有相同的数字字段,我希望根据字符串(即第二列)进行排序


为此,我尝试使用LinuxSort进行排序,LinuxSort采用外部排序,但问题是它没有根据ASCII码对字符串进行排序。有什么想法吗

GNU排序实用程序根据当前区域设置进行排序。请参阅手册页上的注释:

   *** WARNING *** The locale specified by the environment affects sort order.  Set LC_ALL=C to get the traditional sort order that uses native byte values.
可以使用-n标志进行数字排序,也可以使用-k组合进行数字和非数字排序。例如:

sort -k1 -k2n

将根据第一列进行文本排序,然后根据第二列进行数字排序。

GNU排序实用程序根据当前区域设置进行排序。请参阅手册页上的注释:

   *** WARNING *** The locale specified by the environment affects sort order.  Set LC_ALL=C to get the traditional sort order that uses native byte values.
可以使用-n标志进行数字排序,也可以使用-k组合进行数字和非数字排序。例如:

sort -k1 -k2n

将根据第一列进行文本排序,然后根据第二列进行数字排序。

等等,你的意思是数字按字母顺序排序吗?根据手册中的说明,排序应该能够定义多个字段,并使用第二个字段解决第一个字段中的关系。查找sort-t:-k2,2n-k5.3,5.4in。下面是一个示例:以下记录应按下一个顺序显示:记录:1932857451456915 QV&6Xr_}p4~0!v~&f9D5sy>14wHml2KIX[1932857456915}Ap>2wNCu!2!I>MLBHr0@=7h IK?4Db%wQElY.JN 9643477564%@!X+D2X'^ttv+Zc0sg\Xei@EQJLbz-B 9643477564 o{Jm98a=k~>'H>a{jVdUodTNiEXCV/::9记录者:9643477564%@!X+D2X'^ttv+Zc0sg\Xei@EQJLbz-B 9643477564 o{Jm98a=k~>'H>a{jVdUodTNiEXCV/::9 1932857456915 QV&6Xr_}p4~0!v~&f9D5sy>14wHml2KIX[ 19328574591456915 }Ap>2wNCu!2!I>MLBHr0@=7h IK?4Db%wQElY.JNI认为问题在于我的stringWait中有像@!%^&*这样的字符,你的意思是数字是按字母顺序排序的吗?根据手册中的说明,排序应该能够定义多个字段,并使用第二个字段解决第一个字段中的关系。查看r sort-t:-k2,2n-k5.3,5.4in。下面是一个示例:以下记录应按下一个顺序显示:记录:193285745591456915 QV&6Xr_}p4~0!v~&f9D5sy>14wHml2KIX[193285745941456915}Ap>2wNCu!2!I>MLBHr0@=7h IK?4Db%wQElY.JN 9643477564%@X+D2X'^ttv+Zc0sg\Xei@EQJLbz-b9643477564 o{Jm98a=k~>'H>a{jVdUodTNiEXCV/::9录制:9643477564%@!X+D2X'^ttv+Zc0sg\Xei@EQJLbz-B 9643477564 o{Jm98a=k~>'H>a{jVdUodTNiEXCV/::9 193285745591456915 QV&6Xr_}p4~0!v~&f9D5sy>14wHml2KIX[1932857451456915}Ap>2wNCu!2!I>MLBHr0@=7h IK?4Db%wQElY.JNI认为问题在于我的字符串中有像@!%^&*这样的字符这里有一个示例:以下记录应按下一个顺序显示:记录:193285745591456915 QV&6Xr_u}p4~0!v~&f9D5sy>14wHml2KIX[193285745591456915}Ap>2wNCu!2!I>MLBHr0@=7h IK?4Db%wQElY.JN 9643477564%@!X+D2X'^ttv+Zc0sg\Xei@EQJLbz-B 9643477564 o{Jm98a=k~>'H>a{jVdUodTNiEXCV/::9记录者:9643477564%@!X+D2X'^ttv+Zc0sg\Xei@EQJLbz-B 9643477564 o{Jm98a=k~>'H>a{jVdUodTNiEXCV/::9 193285745591456915 QV&6Xr_}p4~0!v~&f9D5sy>14wHml2KIX[1932857451456915}Ap>2wNCu!2!I>MLBHr0@=7h IK?4Db%wQElY.JNtrue但sort-k1-k2n实际上,我的第一个组件是numaric,第二个是字符串,但是基于字符串排序时,它不会基于ASCII码排序。问题是,我的字符串+1中有像@!%^&*这样的字符:排序将对任何类型的文本进行排序,即使是二进制文本,只要它不包含字符I’我不知道为什么要对二进制字段进行排序,因为它可能毫无意义。@shaklasah如果将LC_ALL设置为建议的值,它将正确排序。下面是一个示例:以下记录应按下一个顺序排序:记录:193285745596915 QV&6Xr_}p4~0!v~&f9D5sy>14wHml2KIX[193285745591456915}Ap>2wNCu!2!I>MLBHr0@=7h IK?4Db%wQElY.JN 9643477564%@!X+D2X'^ttv+Zc0sg\Xei@EQJLbz-B 9643477564 o{Jm98a=k~>'H>a{jVdUodTNiEXCV/::9记录者:9643477564%@!X+D2X'^ttv+Zc0sg\Xei@EQJLbz-B 9643477564 o{Jm98a=k~>'H>a{jVdUodTNiEXCV/::9 193285745591456915 QV&6Xr_}p4~0!v~&f9D5sy>14wHml2KIX[1932857451456915}Ap>2wNCu!2!I>MLBHr0@=7h IK?4Db%wQElY.JNtrue但sort-k1-k2n实际上,我的第一个组件是numaric,第二个是字符串,但是基于字符串排序时,它不会基于ASCII码排序。问题是,我的字符串+1中有像@!%^&*这样的字符:排序将对任何类型的文本进行排序,即使是二进制文本,只要它不包含字符I’我不知道为什么要对二进制字段进行排序,因为它可能毫无意义。@shaklasah如果您将LC_ALL设置为建议的值,它会 将正确排序。