gpt4 book ai didi

linux - 对日期时间数据进行排序 在 UNIX 中使用排序

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:51:09 26 4
gpt4 key购买 nike

我想使用 sort 命令对我的文本文件数据进行排序。我的数据格式如下。

01-03-17  10:30AM                 1367 data_03012017_10_30_02.csv
01-03-17 11:00AM 32 data_03012017_11_00_02.csv
01-03-17 11:30AM 7532 data_03012017_11_30_03.csv
01-03-17 12:00AM 3442 data_03012017_00_00_02.csv
01-03-17 12:00PM 9715 data_03012017_12_00_03.csv
01-03-17 12:30AM 1753 data_03012017_00_30_00.csv
01-03-17 12:30PM 5857 data_03012017_12_30_03.csv

以上是我的文件数据。请帮助我对这些数据进行排序。我陷入了 AM 和 PM 数据中。请帮忙解决这个问题。使用 sort -n -t","-k1.7,1.10 -k1.1,1.2 -k1.4,1.5 命令数据将按日期排序,但不会按 AM 和 PM 排序。让我知道如何执行此操作。

最佳答案

假设您的数据在 unsorted.dat 中,您可以使用以下代码

cat unsorted.dat | while read line ; do
d=$( echo "$line" | cut -d" " -f1-2 )
s=$( echo "$d" | \
sed 's/^\([0-9]*\)-\([0-9]*\)-\([0-9]*\)\(\s.*\)$/\3-\1-\2\4/' | \
xargs -0 date +%s -d )
echo "$s $line"
done | sort -n -k1,1 | cut -d" " -f2-

它的作用是

  1. 逐行读取文件
  2. 将前两列的日期字段提取到变量$d
  3. 将字段的顺序从 MM-DD-YY 更改为 GNU date 实用程序识别的 YY-MM-DD
  4. 将日期转换为自 01-01-1970 以来的秒数
  5. 在行中添加秒数
  6. 按秒数排序
  7. 将包含秒数的第一个字段剪切出来。

结果:

01-03-17  12:00AM                 3442 data_03012017_00_00_02.csv
01-03-17 12:30AM 1753 data_03012017_00_30_00.csv
01-03-17 10:30AM 1367 data_03012017_10_30_02.csv
01-03-17 11:00AM 32 data_03012017_11_00_02.csv
01-03-17 11:30AM 7532 data_03012017_11_30_03.csv
01-03-17 12:00PM 9715 data_03012017_12_00_03.csv
01-03-17 12:30PM 5857 data_03012017_12_30_03.csv

关于linux - 对日期时间数据进行排序 在 UNIX 中使用排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41446577/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com