linux - 排序在 bash 脚本中不起作用

标签 linux bash sorting

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

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

这是我的 bash 脚本:

#!/bin/bash
mongoexport --type=csv ${QUERY} | /usr/bin/sort > export.csv

export.csv 的内容与原始的 mongoexport-output 相同——它仍然是未排序的。

令人困惑的是:当我直接从命令行运行这个命令时,sort 做了它应该做的事情:它对行进行排序。

我做错了什么?

最佳答案

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

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

sort: failed to set locale; using simple byte comparison

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

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

关于linux - 排序在 bash 脚本中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52607495/

相关文章:

java - 所有PC的固定绝对路径

linux - 如何在gedit上重做

bash - gcloud 根据时间过滤结果

linux - 打印包含命令的变量

javascript - 如何使用主键和辅助键对数据进行非规范化

linux - 无法使用 clang 在 linux 上构建 cuda 7.0 示例

linux - 有没有办法让 rlwrap 自动删除历史文件?

bash - 将文件从一个位置复制到另一个位置并重命名的 Shell 脚本将当前日期添加到每个文件

arrays - 给定一个数字 X ,在两个排序数组中找到两个元素,例如 A[i]+B[j] = X in O(n+m)

Javascript : natural sort of alphanumerical strings