讲师给了我们一个代码:
sort -k 3.7nbr -k 3.1nbr -k 3.4nbr distros.txt > distros-by-date.txt
应该按日期对此distros.txt文件进行排序
Fedora:10:11/25/2008
SUSE:11.0:06/19/2008
Ubuntu:8.04:04/24/2008
Fedora:8:11/08/2007
SUSE:10.3:10/04/2007
Ubuntu:6.10:10/26/2006
Fedora:7:05/31/2007
Ubuntu:7.10:10/18/2007
Ubuntu:7.04:04/19/2007
SUSE:10.1:05/11/2006
Fedora:6:10/24/2006
Fedora:9:05/13/2008
Ubuntu:6.06:06/01/2006
Ubuntu:8.10:10/30/2008
Fedora:5:03/20/2006
假设代码有效,这应该是输出的简化版
Fedora 10
Ubuntu 8.10
SUSE 11.0
Fedora 9
Ubuntu 8.04
Fedora 8
Ubuntu 7.10
SUSE 10.3
Fedora 7
Ubuntu 7.04
事情是,它没有工作,我很难找到错误的。我已经读过它,但这些例子只使用 n , b 和 r ?,有时候之间也有空格 - k和钥匙,有时不是;最后,有时候在键(3.7)和逗号(3,7)之间有一个点。我尝试阅读手册页,但我无法绕过它,有人可以解释一下吗?
如果这很重要,有时他会使用mac并导致代码出现问题,也许是操作系统?
答案 0 :(得分:0)
您没有字段分隔符规范来告诉sort
它应该使用冒号:
sort -t: -k 3.7nbr -k 3.1nbr -k 3.4nbr
而且,要获得简化的输出,您只需要第一列和第二列,如下面的记录:
$ sort -t: -k 3.7nbr -k 3.1nbr -k 3.4nbr inputfile | awk -F: '{print $1" "$2}'
Fedora 10
Ubuntu 8.10
SUSE 11.0
Fedora 9
Ubuntu 8.04
Fedora 8
Ubuntu 7.10
SUSE 10.3
Fedora 7
Ubuntu 7.04
Ubuntu 6.10
Fedora 6
Ubuntu 6.06
SUSE 10.1
Fedora 5
就标志而言,n
表示数字比较,b
表示忽略前导空格(大概涵盖像12/ 4/2022
这样的情况)和r
表示反向顺序(最新最早的。)
答案 1 :(得分:0)
您缺少选项-t:
,它将字段分隔符设置为:。此外,-k 3.4nbr
是多余的,但它不会受到伤害。
手册页中有关-k
的内容:
KEYDEF是开始和停止位置的F [.C] [OPTS] [,F [.C] [OPTS]],其中F是字段编号,C是字段中的字符位置;两者都是原点1,停止位置默认为行的结束。
这意味着什么:
密钥规范(-k
之后的内容)包含一个字段编号(F
),可选地([...]
)后跟一个句点和一个字符偏移量({{1} })和可选的选项字符.C
),后面可以跟第二个字段编号和可选的字符偏移量。
如果缺少字符偏移,则键以字段中的第一个字符开头。
第一个字段编号/字符偏移量定义字段的开头。如果有第二个[OPTS]
,则它定义字段的结尾;否则,该字段将移至该行的末尾。