Linux 从bash脚本内部排序不起作用
我正在使用bash脚本从数据库中检索CSV样式的数据,我对其进行排序并将其放入外部文件中 一切似乎都是正确的,但是排序(sort(GNU coreutils)8.26)并没有对行进行排序 这是我的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
#!/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
)的良好信息可用,即: