Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 从bash脚本内部排序不起作用_Linux_Bash_Sorting - Fatal编程技术网

Linux 从bash脚本内部排序不起作用

Linux 从bash脚本内部排序不起作用,linux,bash,sorting,Linux,Bash,Sorting,我正在使用bash脚本从数据库中检索CSV样式的数据,我对其进行排序并将其放入外部文件中 一切似乎都是正确的,但是排序(sort(GNU coreutils)8.26)并没有对行进行排序 这是我的bash脚本: #!/bin/bash mongoexport --type=csv ${QUERY} | /usr/bin/sort > export.csv export.csv的内容与原始mongoexport输出内容相同-仍然未排序 令人困惑的是:当我直接从命令行运行这个命令时,sort

我正在使用bash脚本从数据库中检索CSV样式的数据,我对其进行排序并将其放入外部文件中

一切似乎都是正确的,但是排序(sort(GNU coreutils)8.26)并没有对行进行排序

这是我的bash脚本:

#!/bin/bash
mongoexport --type=csv ${QUERY} | /usr/bin/sort > export.csv
export.csv的内容与原始mongoexport输出内容相同-仍然未排序

令人困惑的是:当我直接从命令行运行这个命令时,sort执行它应该执行的操作:它对行进行排序


我做错了什么

感觉我花了好几天的时间在这个问题上,但我终于想出了该怎么办。解决方案的关键是调试日志(每次都是如此)。当然,sort提供了一个名为--debug的命令行参数

这导致在返回未排序的数据之前,进行简单而简短的排序通知:

排序:设置区域设置失败;使用简单字节比较


解决方案是设置一个名为LC\u ALL的环境变量(由于某些原因我还不知道,在Ubuntu上我不得不使用LANGenv变量)。这就是我的导出脚本的内容:

#!/bin/bash
export LANG='en_GB.UTF-8'
export LC_ALL='en_US.UTF-8'
mongoexport --type=csv ${QUERY} | /usr/bin/sort > export.csv

感觉我在这个问题上花了好几天时间,但我终于想出了该怎么办。解决方案的关键是调试日志(每次都是如此)。当然,sort提供了一个名为--debug的命令行参数

这导致在返回未排序的数据之前,进行简单而简短的排序通知:

排序:设置区域设置失败;使用简单字节比较


解决方案是设置一个名为LC\u ALL的环境变量(由于某些原因我还不知道,在Ubuntu上我不得不使用LANGenv变量)。这就是我的导出脚本的内容:

#!/bin/bash
export LANG='en_GB.UTF-8'
export LC_ALL='en_US.UTF-8'
mongoexport --type=csv ${QUERY} | /usr/bin/sort > export.csv

使用
LC_ALL=C
您将获得更短的排序时间,但如果数据中有一些需要排序的多字节字符,则可能会得到不正确的结果。“解决方案是设置一个名为LC_ALL的环境变量…”,
manbash
LANG用于确定任何类别的区域设置类别,该类别未特别选择以LC\u开头的变量。
LC\u所有此变量将覆盖LANG的值和指定区域设置类别的任何其他LC\u变量。
LC\u ALL='en\u US.UTF-8'覆盖
LANG='en\u GB.UTF-8'
sort
可识别区域设置(
man sort
***警告***环境指定的区域设置会影响排序顺序。设置LC\u ALL=C可获取使用本机字节值的传统排序顺序。
)。关于区域设置(
man locale
)的良好信息是可用的,即:使用
LC_ALL=C
您将获得更短的排序时间,但如果数据中有一些需要排序的多字节字符,则可能会得到不正确的结果。“解决方案是设置一个名为LC_ALL的环境变量…”,
manbash
LANG用于确定任何类别的区域设置类别,该类别未特别选择以LC\u开头的变量。
LC\u所有此变量将覆盖LANG的值和指定区域设置类别的任何其他LC\u变量。
LC\u ALL='en\u US.UTF-8'覆盖
LANG='en\u GB.UTF-8'
sort
可识别区域设置(
man sort
***警告***环境指定的区域设置会影响排序顺序。设置LC\u ALL=C可获取使用本机字节值的传统排序顺序。
)。关于区域设置(
man-locale
)的良好信息可用,即: