使用sort (coreutils) 5.2.1
我有以下文件,我想按字段4的非整数部分排序。这可以是负数或正数,也可能具有值INF。
field1 field2 field3 tag=INF field5 field6
field1 field2 field3 tag=INF field5 field6
field1 field2 field3 tag=0.123 field5 field6
field1 field2 field3 tag=4.22 field5 field6
field1 field2 field3 tag=5.77 field5 field6
field1 field2 field3 tag=-1.92 field5 field6
field1 field2 field3 tag=-1.91 field5 field6
field1 field2 field3 tag=INF field5 field6
我希望将其排序为
field1 field2 field3 tag=-1.92 field5 field6
field1 field2 field3 tag=-1.91 field5 field6
field1 field2 field3 tag=0.123 field5 field6
field1 field2 field3 tag=4.22 field5 field6
field1 field2 field3 tag=5.77 field5 field6
field1 field2 field3 tag=INF field5 field6
field1 field2 field3 tag=INF field5 field6
field1 field2 field3 tag=INF field5 field6
鉴于字段的数字部分位于字符位置4(假设索引从0开始,我不确定),我尝试使用以下选项sort
:
sort -g -k4.4 inputfile
sort -g -k4.5 inputfile
sort -n -k4.4 inputfile
sort -n -k4.5 inputfile
sort -g inputfile
这些都产生以下,这是接近但不太正确。大小的排序正确,但我想要最负面的值。
field1 field2 field3 tag=0.123 field5 field6
field1 field2 field3 tag=-1.91 field5 field6
field1 field2 field3 tag=-1.92 field5 field6
field1 field2 field3 tag=4.22 field5 field6
field1 field2 field3 tag=5.77 field5 field6
field1 field2 field3 tag=INF field5 field6
field1 field2 field3 tag=INF field5 field6
field1 field2 field3 tag=INF field5 field6
如何让sort
表现出来?
FWIW,这里有更多信息:
LANG = en_US.UTF-8
Red Hat Enterprise Linux WS release 4 (Nahant Update 6)
答案 0 :(得分:1)
您可以添加一个预处理awk步骤,该步骤在末尾添加一个包含数字部分或字段4中的数字表示的新字段,并按此字段排序。添加后处理步骤以去除此字段。请注意,在下面的示例中,INF
已设置为10**10
的任意高值,如果输入中的自然数字超过此值,则可以将其设置为更高的值< / p>
awk '{x=$4; sub("tag=", "", x); sub("INF", 10**10, x); print $0, x}' file.txt |
sort -k7,7g |
cut -f-6 -d' '
field1 field2 field3 tag=-1.92 field5 field6
field1 field2 field3 tag=-1.91 field5 field6
field1 field2 field3 tag=0.123 field5 field6
field1 field2 field3 tag=4.22 field5 field6
field1 field2 field3 tag=5.77 field5 field6
field1 field2 field3 tag=INF field5 field6
field1 field2 field3 tag=INF field5 field6
field1 field2 field3 tag=INF field5 field6
答案 1 :(得分:1)
我在Mac上,所以实现方式略有不同,但我发现这可行:
sort -gb -k 4.5,4 inputfile
英文:&#34; 排序,以 -g 通用数字方式,忽略 -b lanks,文件 inputfile 使用 4 -k(c) olumn的数据,来自 5 元素列到 4 列&#34;
中数据的末尾field1 field2 field3 tag=-1.92 field5 field6
field1 field2 field3 tag=-1.91 field5 field6
field1 field2 field3 tag=0.123 field5 field6
field1 field2 field3 tag=4.22 field5 field6
field1 field2 field3 tag=5.77 field5 field6
field1 field2 field3 tag=INF field5 field6
field1 field2 field3 tag=INF field5 field6
field1 field2 field3 tag=INF field5 field6