如何在排序并忽略大小写的同时保留两个“相等”字符串的行顺序?

如何在排序并忽略大小写的同时保留两个“相等”字符串的行顺序?

的内容fred为:

START
test
TEST
tEST
END

从 bash 终端sort fred返回:

END
START
test
tEST
TEST

一切都很好。现在我输入sort fred -f,结果相同sort fred。但是因为TEST位于 之前tEST,所以预期结果是:

END
START
test
TEST
tEST

如何保留两个“相等”字符串的行顺序?使用 Ubuntu 18.04 和 bash 4.4.20(1)-release。

答案1

我想你的意思是稳定排序sort命令确实有一个-s执行稳定排序的标志。

摘录自sort手册页

-s、--稳定
              通过禁用最后的比较来稳定排序

输出sort fred -f

END
START
test
tEST
TEST

输出sort fred -fs

END
START
test
TEST
tEST

答案2

也使用该-s选项:

sort -fs fred

您已通过-f使排序不区分大小写,但由于您想保留比较相同行的原始顺序,因此您还需要该-s选项。这将产生您想要的输出。

ek@Cord:~$ sort -f fred  # without -s
END
START
TEST
tEST
test
ek@Cord:~$ sort -fs fred  # with -s
END
START
test
TEST
tEST

至于为什么需要这样做:

相关内容