我在变量排序时遇到问题。
我使用 Bash 和 NSH 控制台。
我加载到操作系统中最大的可变文件夹:
vdirList=$(nexec -e "find /etc -type d -size +1k -print0 | xargs -0 du -h --max-depth 3 --time --time-style +'%F %T %z' 2>/dev/null| sort -h -k1 2>/dev/null| tail -7 | sed -n '$ ! p' | uniq -c | tac | sed 's/^/BAORES: /'")
vdirList+="\n"
vdirList+=$(nexec -e "find /usr -type d -size +1k -print0 | xargs -0 du -h --max-depth 3 --time --time-style +'%F %T %z' 2>/dev/null| sort -h -k1 2>/dev/null| tail -7 | sed -n '$ ! p' | uniq -c | tac | sed 's/^/BAORES: /'")
vdirList+="\n"
这是输出:
BAORES: 3 22M 2017-05-05 14:53:20 +0300 /etc/selinux/targeted
BAORES: 2 22M 2017-05-05 14:53:20 +0300 /etc/selinux
BAORES: 1 13M 2017-05-05 14:53:20 +0300 /etc/selinux/targeted/modules
BAORES: 2 1.9G 2018-12-20 05:49:04 +0200 /usr/lib
BAORES: 3 1.3G 2018-12-20 05:48:55 +0200 /usr/lib/x86_64-linux-gnu
BAORES: 1 445M 2018-12-20 05:49:04 +0200 /usr/lib/i386-linux-gnu
我想按 3 列对此文件进行排序,我使用此命令:
dirList=$(nexec -e "echo \"$vdirList\" | sort -hrk3 | head -n 10")
但我的输出是:
BAORES: 3 22M 2017-05-05 14:53:20 +0300 /etc/selinux/targeted
BAORES: 3 1.3G 2018-12-20 05:48:55 +0200 /usr/lib/x86_64-linux-gnu
BAORES: 2 22M 2017-05-05 14:53:20 +0300 /etc/selinux
BAORES: 1 445M 2018-12-20 05:49:04 +0200 /usr/lib/i386-linux-gnu
BAORES: 1 13M 2017-05-05 14:53:20 +0300 /etc/selinux/targeted/modules
BAORES: 2 1.9G 2018-12-20 05:49:04 +0200 /usr/lib
有人可以帮忙解决这个问题吗?谢谢。
最佳答案
我可以使用LC_ALL=en_US.UTF-8
确认奇怪的行为。在 C 语言环境下,它似乎可以正常工作:
$ input='BAORES: 3...
...
.../i386-linux-gnu'
$ LC_ALL=C sort -k3,3hr <<< "$input"
BAORES: 2 1.9G 2018-12-20 05:49:04 +0200 /usr/lib
BAORES: 3 1.3G 2018-12-20 05:48:55 +0200 /usr/lib/x86_64-linux-gnu
BAORES: 1 445M 2018-12-20 05:49:04 +0200 /usr/lib/i386-linux-gnu
BAORES: 2 22M 2017-05-05 14:53:20 +0300 /etc/selinux
BAORES: 3 22M 2017-05-05 14:53:20 +0300 /etc/selinux/targeted
BAORES: 1 13M 2017-05-05 14:53:20 +0300 /etc/selinux/targeted/modules
同样有效的方法是显式指定分隔符:
sort -t' ' -k3,3hr
但我发现区域设置更可靠。
关于bash - 排序变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53870402/