Bash:按字节顺序区分大小写的排序命令或使用python sort命令对文本文件进行排序

时间:2016-02-27 12:20:44

标签: python linux bash sorting case

文字档案
使用sort -s (区分大小写)

Act
Bad
Bag
Card
East
about
across
back
ball
camera
canvas
danger
dark
early
edge

使用sort -f (不区分大小写)

about
across
Act
back
Bad
Bag
ball
camera
canvas
Card
danger
dark
early
East
edge

以大写字母开头的单词在小写单词之间按字母顺序排序。

我想要的是大写的单词是在每个下一个字母的开头(按字母顺序排序的upercase):
预期输出

Act
about
across
Bad
Bag
back
ball
Card
camera
canvas
danger
dark
East
early
edge

如何使用bash或python sort命令实现这一点?

2 个答案:

答案 0 :(得分:7)

此命令将执行此操作:

LC_ALL=C sort -k 1.1f,1.1 PATH

其中PATH是您的文件路径。

说明:

  • sort归类顺序受当前语言环境的影响,因此LC_ALL=C用于将语言环境设置为已知值(POSIX语言环境,基于ASCII字符代码值的归类顺序)
  • -k 1.1f,1.1告诉sort以不区分大小写的方式使用第一个字符作为主要排序键
  • 主键的相等比较将通过再次比较所有字符来解决(此时,以区分大小写的方式)。

输出完全符合问题的要求。

答案 1 :(得分:3)

我设法做到了!这是(在Python中):

import string

words = [...]
newwords = sorted(words, key=lambda x: [ord(y) if y in string.lowercase else ord(y.lower()) - 0.5 for y in x])
print(newwords)

输出:

['Act', 'about', 'across', 'Bad', 'Bag', 'back', 'ball', 'Card', 'camera', 'canvas', 'danger', 'dark', 'East', 'early', 'edge']