Linux脚本按行中的日期时间模式过滤文本文件中的行

时间:2014-06-29 17:51:34

标签: linux shell awk sed

我不是Linux脚本专家,我知道我可以通过一些编程实现这一点,但我只是试着通过一些命令行或简单的脚本来完成它。任何帮助将不胜感激。

我有一个csv文件,包含以下行

Date,Time,Global_active_power,Global_reactive_power,Voltage,Global_intensity,Sub_metering_1,Sub_metering_2,Sub_metering_3

16/12/2006,18:00:00,2.79,0.18,237.52,11.8,0,0,18
16/12/2006,18:01:00,2.624,0.144,238.2,11,0,0,17
16/12/2006,18:02:00,2.772,0.118,238.28,11.6,0,0,17
16/12/2006,18:03:00,3.74,0.108,236.93,16.4,0,16,18
16/12/2006,18:04:00,4.928,0.202,235.01,21,0,37,16
16/12/2006,18:05:00,6.052,0.192,232.93,26.2,0,37,17
16/12/2006,18:06:00,6.752,0.186,232.12,29,0,36,17
16/12/2006,18:07:00,6.474,0.144,231.85,27.8,0,37,16
16/12/2006,18:08:00,6.308,0.116,232.25,27,0,36,17
16/12/2006,18:09:00,4.464,0.136,234.66,19,0,37,16
16/12/2006,18:10:00,3.396,0.148,236.2,15,0,22,18
16/12/2006,18:11:00,3.09,0.152,237.07,13.8,0,12,17
16/12/2006,18:12:00,3.73,0.144,235.78,16.4,0,27,17
16/12/2006,18:13:00,2.308,0.16,237.43,9.6,0,1,17
16/12/2006,18:14:00,2.388,0.158,237.26,10,0,1,17
16/12/2006,18:15:00,4.598,0.1,234.25,21.4,0,20,17
16/12/2006,18:16:00,4.524,0.076,234.2,19.6,0,9,17
16/12/2006,18:17:00,4.202,0.082,234.31,17.8,0,1,17
16/12/2006,18:18:00,4.472,0,233.29,19.2,0,1,16
16/12/2006,18:19:00,2.852,0,235.61,12,0,1,17
16/12/2006,18:20:00,2.928,0,235.25,12.4,0,1,17
16/12/2006,18:21:00,2.94,0,236.04,12.4,0,2,17
16/12/2006,18:22:00,2.934,0,235.51,12.4,0,1,17
16/12/2006,18:23:00,2.926,0,235.68,12.4,0,1,17
16/12/2006,18:24:00,3.452,0,235.2,15.2,0,1,17

如上所示,第二个字段是一天中的时间,hh:mm:ss(最高分钟分辨率)。显然,数据记录是每分钟创建的。我想创建脚本来执行以下操作:

  1. 对于日期字段(第一个字段),请提供两个日期:开始日期“SDate”和结束日期“EDate”
  2. 对于时间提交(第二个字段),给两个小时:开始时间“SHour”和结束时间“Ehour”
  3. 该脚本将生成5个新数据文件:
    • 第一个文件将包含所有小时分钟记录:00,05,10,15,20 ...
    • 第二个文件将包含所有小时分钟记录:01,06,11,16,21 ... 01
    • 第三个文件将包含所有分钟的记录:02,07,12,17,22 ...... 02
    • 第四个文件将包含所有分钟的记录:03,08,13,18,23 ...... 02
    • 第五个文件将包含所有分钟的记录:04,09,14,19,24 ...... 02

2 个答案:

答案 0 :(得分:1)

awk -F: 'NR>1{print > "file" (1+$2%5)}' input

这应该做你想要的。运行后,您应该看到5个文件:file1-file5

答案 1 :(得分:0)

awk与多个分隔符一起使用,并为每个文件使用单独的行。

awk -F'[:,]' '$3 % 5 == 0' Input.txt > File1
awk -F'[:,]' '$3 % 5 == 1' Input.txt > File2
awk -F'[:,]' '$3 % 5 == 2' Play.input > File3
awk -F'[:,]' '$3 % 5 == 3' Play.input > File4
awk -F'[:,]' '$3 % 5 == 4' Play.input > File5