k参数在排序函数中做什么(Linux Bash脚本)?

k参数在排序函数中做什么(Linux Bash脚本)?,linux,bash,sorting,Linux,Bash,Sorting,从Linux手册: 通过键进行排序;KEYDEF提供位置和类型 我不知道这意味着什么,但我看到它被这样使用: cut -f 2 *ptt | tail -n +4 | sort | uniq -c | sort -k1 -rn ls -1 *\.flv | sort -n -k1.2 然后又像这样: cut -f 2 *ptt | tail -n +4 | sort | uniq -c | sort -k1 -rn ls -1 *\.flv | sort -n -k1.2 KEYDEF是

从Linux手册: 通过键进行排序;KEYDEF提供位置和类型

我不知道这意味着什么,但我看到它被这样使用:

cut -f 2 *ptt | tail -n +4 | sort | uniq -c | sort -k1 -rn
ls -1 *\.flv | sort -n -k1.2
然后又像这样:

cut -f 2 *ptt | tail -n +4 | sort | uniq -c | sort -k1 -rn
ls -1 *\.flv | sort -n -k1.2
KEYDEF是F[.C][OPTS][,F[.C][OPTS]]表示开始和停止位置,其中F是字段编号,C是字段中的字符位置;两者都是起源 1,并且停止位置默认为线的端点。如果-t和-b都无效,则字段中的字符从字符开始计数 前面的空白。OPTS是一个或多个单字母排序选项[BDFGIMHNRV],它覆盖该键的全局排序选项。 如果未指定键,则使用整行作为键

输入文件示例:

123 233
214 176 
341 325
按第一个字段排序:

sort -t' ' -k1 input
给出:

第二个字段:

sort -t' ' -k2 input
sort -t' ' -k2.3 input
给出:

第一个字段的第二位和第三位数字:

sort -t' ' -k1.2 input
给出:

第二个字段的最后一位:

sort -t' ' -k2 input
sort -t' ' -k2.3 input
给出:


与手动页面相比,用更少的字数:它指定了文件排序的“列”。如果列号包含句点,则超过句点的值将用作字段内的偏移量。例如,
-k1.2
根据第一列的第二个字符进行排序


列通常由制表符分隔,但您可以使用
-t
更改。例如,
-t,
将使用逗号分隔的列(例如,CSV文件)。

默认设置(至少在coreutils 8.22中)是基于空格而不是制表符拆分列。我们可能需要澄清的是,选项是sort命令的“-”选项,例如
sort-k8rn,8
相当于
sort-r-n-k8,8
。它允许您以不同的方式对每个键进行排序,而不是对整个sort命令进行全局排序(我花了很长时间才意识到)