我正在遵循这个脚本并尝试了解每一行发生的情况。在以下行中提取这里它涉及对一些字段进行排序。在第 14 个示例中这里它表示-k2,5
代表对第 2 列和第 5 列(数值列)进行排序,并-k9
代表对第 9 列(非数值列)进行排序。
# Process the STMs
cat db/TEDLIUM_release1/$set/stm/*.stm | sort -k1,1 -k2,2 -k4,4n | \
sed -e 's:<F0_M>:<o,f0,male>:' \
-e 's:<F0_F>:<o,f0,female>:' \
-e 's:([0-9])::g' \
-e 's:<sil>::g' \
-e 's:([^ ]*)$::' | \
awk '{ $2 = "A"; print $0; }'
} | local/join_suffix.py db/TEDLIUM_release1/TEDLIUM.150K.dic > data/$set/stm
但在上面的代码段中(排序 -k1,1 -k2,2 -k4,4n),它映射-k1,1
并且也有 3 组。有人可以帮助我理解这一点吗?
答案1
从man sort
:
-k, --key=POS1[,POS2]
start a key at POS1 (origin 1), end it at POS2 (default end of line)
...
POS is F[.C][OPTS], where F is the field number and C the character position
in the field; both are origin 1. If neither -t nor -b is in effect,
characters in a field are counted from the beginning of the preceding
whitespace. OPTS is one or more single-letter ordering options, which
override global ordering options for that key. If no key is given, use the
entire line as the key.
您发布的链接中的第 14 个示例根本不正确。从上面的手册页摘录中可以很清楚地看出,-k2,5
不会“基于键 2 和 5”排序,而是基于字段 2通过5、所有的一起算作一个排序键。
(顺便说一句:来自随机在线资源的代码示例非常适合粗略地了解该命令的用途或功能,但是当您想要深入了解并真正了解该命令时,理解怎么回事,阅读(或至少查阅)手册页是无可替代的.);)