我正在尝试排序一个两列列表,其中第二列的时间为hh:mm:s使用sort -k2例如
peer0 23:51:3
peer1 23:51:18
peer2 23:51:15
得到
peer1 23:51:18
peer0 23:51:3
peer2 23:51:15
最有可能的一个问题是,在几秒钟内,3之前缺少0。知道怎么加这个吗?
谢谢
sort
的一些实现(例如来自GNU coreutils的实现)提供版本排序(-V
),它将1:3
排序在1:30
之前。
sort -k2,2V
如果你的sort
没有这个,数字(-n
)按单个时间组件排序。如果你有时间,那就是sort -t: -n
。但是,由于您有空格分隔的列和冒号分隔的时间组件,因此需要进行一些预处理和后处理。
如果你的数据不包含:
,你可以使用
< yourFile tr ' ' ':' | sort -t: -n -k2,2 -k3,3 -k4,4 | sed 's/:/ /'
您可以使用awk:
#!/bin/bash
data='23:51:3
23:51:18
23:51:15
'
echo "$data" | awk -F':' -v OFS=':' '{ if (length($3) == 1) $3="0"$3; print }' | sort -t: -k2