![Solaris + 使用sort命令根据日期和时间对文件进行排序](https://linux22.com/image/1311638/Solaris%20%2B%20%E4%BD%BF%E7%94%A8sort%E5%91%BD%E4%BB%A4%E6%A0%B9%E6%8D%AE%E6%97%A5%E6%9C%9F%E5%92%8C%E6%97%B6%E9%97%B4%E5%AF%B9%E6%96%87%E4%BB%B6%E8%BF%9B%E8%A1%8C%E6%8E%92%E5%BA%8F.png)
我有一个从某个脚本(在 Solaris 机器上)在 /var/tmp/file.txt 中创建的列表,以下列表有 4 个字段
请指教如何根据以下时间戳对列表进行排序(通过 sort 命令或其他 solaris 命令,如 awk 或 sed ......)
例如日期和时间 15-10-2009 08:29:18 应该在 15-10-2009 08:29:10 之前...等等
file.txt 示例(未排序文件)
PHONE_NUMBER TIMESTAMP ID TYPE
-------------------- ------------------- ---- --------------
972544111222 15-10-2009 08:29:18 20 sharp_gx10
33633333333 24-09-2009 16:17:45 20 other_mm_phone
841990000043 08-10-2009 09:04:38 60 other_mm_phone
972541230001 08-10-2009 14:23:48 20 other_mm_phone
答案1
正如我在评论中所说,时间戳格式使我的方法看起来很复杂,但它主要是机械重复。
awk 'NR>2 {print $1"-"$2"-"$3"-"$4"-"$5}' file.txt |\
awk -F'-' '{print $4"-"$3"-"$2"-"$5"-"$1"-"$6"-"$7}' |\
sort |\
awk -F'-' '{print $5"\t"$1"-"$2"-"$3" "$4"\t"$6"\t"$7}'
- 跳过前两行(仅一个标题)并将剩余的行转换为使用单个分隔符(在本例中为破折号,确保它不能出现在最后一个字段中)(最初它在空格和破折号之间交替,因为日期格式),
- 用破折号分割字段并将日期移动到行首(以便于使用
sort
)并以降序格式打印, - 排序和
- 以类似于输入的格式打印出信息(交换
$1
并$3
获取旧日期格式)。
如果需要的话,稍后再添加标题行。
编辑:我看到你想要反向排序。只需更改sort
为 即可sort -r
。