Linux shell排序文件根据第二列?

Ram*_*rar 81 linux shell

我有这样一个文件:

FirstName, FamilyName, Address, PhoneNumber
Run Code Online (Sandbox Code Playgroud)

我如何按FamilyName对其进行排序?

Joh*_*ica 143

如果这是UNIX:

sort -k 2 file.txt
Run Code Online (Sandbox Code Playgroud)

您可以使用多个-k标志对多个列进行排序.例如,要按姓氏排序,请将名字作为平局:

sort -k 2,2 -k 1,1 file.txt
Run Code Online (Sandbox Code Playgroud)

"man sort"的相关选项:

-k, - key = POS1 [,POS2]

在POS1开始一个键,在POS2结束它(原点1)

POS是F [.C] [OPTS],其中F是字段编号,C是字段中的字符位置.OPTS是一个或多个单字母排序选项,它覆盖该键的全局排序选项.如果没有给出密钥,请使用整行作为密钥.

-t, - field-separator = SEP

使用SEP代替非空白到空白转换

  • 只需要小心谨慎使用`--field-separator =','`如果你有一个数据输入操作符类型的"名字",如"比利鲍勃"或其他......空间可以轻松进入你的数据,如果你不防范,但逗号是相对不太可能的. (2认同)
  • 请注意,如果列在视觉上对齐,即每个字段之间存在非常数量的空格,则必须使用`-b`选项.这是因为`sort`实际上是在考虑要排序的字符串在逗号之后开始,而不是从列的第一个字母开始.此外,您可能需要在命令前加上`LC_ALL = C`,以避免由于语言环境引起的任何副作用,即使在简单的ASCII文件上也可能发生这种副作用. (2认同)

小智 11

sort -nk2 file.txt
Run Code Online (Sandbox Code Playgroud)

因此,您可以更改列号。


小智 7

要仅按第二个字段排序(因此第二个字段匹配,那些匹配的行保持原始顺序,而不在其他字段上排序):

sort -k 2,2 -s orig_file > sorted_file
Run Code Online (Sandbox Code Playgroud)