【发布时间】:2011-05-14 20:12:03
【问题描述】:
我有一个这样的文件:
FirstName, FamilyName, Address, PhoneNumber
如何按 FamilyName 对其进行排序?
【问题讨论】:
-
哪个操作系统和命令处理器?
我有一个这样的文件:
FirstName, FamilyName, Address, PhoneNumber
如何按 FamilyName 对其进行排序?
【问题讨论】:
如果这是 UNIX:
sort -k 2 file.txt
您可以使用多个-k 标志对多个列进行排序。例如,要按姓氏排序,然后按名字排序:
sort -k 2,2 -k 1,1 file.txt
“man sort”中的相关选项:
-k, --key=POS1[,POS2]
在 POS1 开始一个键,在 POS2(原点 1)结束它
POS 是 F[.C][OPTS],其中 F 是字段编号,C 是字段中的字符位置。 OPTS 是一个或多个单字母排序选项,它覆盖该键的全局排序选项。如果没有给出键,则使用整行作为键。
-t, --field-separator=SEP
使用 SEP 而不是非空白到空白的过渡
【讨论】:
--field-separator=',' 时要小心一点,如果您可能有数据输入操作员输入“名字”的值,例如“比利鲍勃”或其他...空格很容易进入您的如果你不提防数据,但逗号相对不太可能。
-b 选项。这是因为sort 实际上是在考虑要排序的字符串就在逗号之后开始,而不是从列的第一个字母开始。此外,您可能需要在命令前加上 LC_ALL=C,以避免由于语言环境而产生的任何副作用,即使在简单的 ASCII 文件上也可能发生这种情况。
-b (--ignore-leading-blanks) 上的部分。澄清一点:echo -e 'aa<SPACE>a\na<SPACE><SPACE>b' | sort -k2 首先给出a<SPACE><SPACE>b(第二列在第一个non-blank to blank transition 之后开始,<SPACE><SPACE>b 在<SPACE>a 之前),但是-b 给出aa<SPACE>a 符合预期(@ 987654337@ 在b 之前)。
仅按第二个字段排序(因此在第二个字段匹配的情况下,匹配的那些行将保持在原始顺序中的顺序,而不对其他字段进行排序):
sort -k 2,2 -s orig_file > sorted_file
【讨论】:
sort -nk2 file.txt
相应地你可以改变列号。
【讨论】:
FWIW,这是一种排序方法,用于显示哪些进程正在使用最多的 virt 内存。
memstat | sort -k 1 -t':' -g -r | less
排序选项设置为第一列,使用 : 作为列分隔符,数字排序和反向排序。
【讨论】: