【发布时间】:2014-04-07 03:09:05
【问题描述】:
我想从日志文件中获取最新版本的文件,并使用 unix 命令输出到一个新文件。
这是日志文件的示例。
补丁.txt
Wed Jan 15 10:42:26 MYT 2014, Start, SPIRTE_4.3.2.B1, OK
Wed Jan 15 10:42:28 MYT 2014, End, TILES_7.3.66B1, DONE
Wed Jan 15 10:42:35 MYT 2014, End, MOVIES_OPENING_4.3.2.B1, FAILED
Wed Jan 15 10:42:36 MYT 2014, Start, MOVEMENT_7.3.68B1, OK
Wed Jan 15 10:42:36 MYT 2014, Start, MOBS_7.3.2B1, OK
Wed Jan 15 10:42:37 MYT 2014, End, TILES_7.3.68B1, DONE
Wed Jan 15 10:42:38 MYT 2014, Start, MOVIES_CUTSCENE_4.3.2.57B1, OK
Wed Jan 15 10:42:38 MYT 2014, Start, GAME_4.3.2.57B1_SERVER, OK
Wed Jan 15 10:42:43 MYT 2014, End, GAME_4.2.57B2_CLIENT, DONE
Wed Jan 15 10:42:43 MYT 2014, End, GAME_4.2.57B4_SERVER, DONE
Wed Jan 15 10:42:45 MYT 2014, End, GAME_4.2.57B1_CLIENT, DONE
Wed Jan 15 10:42:45 MYT 2014, End, GAME_4.2.57B1_SERVER, DONE
Wed Jan 15 10:42:45 MYT 2014, End, DB_4.2.57C2_CLIENT, DONE
Wed Jan 15 10:42:45 MYT 2014, End, DB_4.2.57C2_SERVER, DONE
1.文件的最新日期指定最新版本,例如
Wed Jan 15 10:42:26 MYT 2014, Start, SPIRTE_4.3.2.B1, DONE
Wed Jan 16 10:42:26 MYT 2014, Start, SPIRTE_4.3.2.B1, DONE //latest
Wed Jan 17 10:42:26 MYT 2014, Start, SPIRTE_4.3.2.B1, FAILED //does not consider
2.DONE 在行尾指定补丁已安装。
3.每个文件都有这种格式[characters_][versionNumber_][CLIENT/SERVER],[CLIENT/SERVER]不是强制性的。
4.如果安装了多个版本的文件,最新版本将覆盖之前的版本。例如
Wed Jan 15 10:42:37 MYT 2014, End, TILES_7.3.68B1, DONE //overwritten
Wed Jan 16 10:45:37 MYT 2014, End, TILES_7.3.70C1, DONE //latest
5. 后缀为 _CLIENT 的文件考虑另一个后缀为 _SERVER 的文件,即使它们以相同的名称开头(但仍受规则 #4 的约束)。 以此为例:
Wed Jan 15 10:39:23 MYT 2014, EndPatch, GAME_TILES_7_3_2_3B1_Client, DONE
Wed Jan 15 10:42:45 MYT 2014, EndPatch, MOB_CHARACTER_4.3.2.57B1, DONE
Wed Jan 15 10:41:39 MYT 2014, EndPatch, MOB_CHARACTER_4.3.2.42B4, DONE
Wed Jan 15 10:41:38 MYT 2014, EndPatch, GAME_TILES_7.3.2.33B3, DONE
Wed Jan 15 10:39:34 MYT 2014, EndPatch, GAME_TILES_7.3.2.1B1, DONE
Wed Jan 15 10:39:07 MYT 2014, EndPatch, GAME_TILES_7.3.2.ServicePackB1, DONE
GAME_TILES_7_3_2_3B1_Client 是一个文件。
GAME_TILES_7.3.2.33B3 是另一个文件。
GAME_TILES_7.3.2.1B1 与 GAME_TILES_7.3.2.33B3 和 GAME_TILES_7.3.2.ServicePackB1 相同
例如输出文件
Wed Jan 15 10:42:37 MYT 2014, End, TILES_7.3.68B1, DONE
Wed Jan 15 10:42:45 MYT 2014, End, GAME_4.2.57B1_CLIENT, DONE
Wed Jan 15 10:42:45 MYT 2014, End, GAME_4.2.57B1_SERVER, DONE
Wed Jan 15 10:42:45 MYT 2014, End, DB_4.2.57C2_CLIENT, DONE
Wed Jan 15 10:42:45 MYT 2014, End, DB_4.2.57C2_SERVER, DONE
策略:
1. sort all the files
2. grep all the lines that has DONE
3. check for rule #4 and rule #5 (how? I can't use tail for this)
我现在在哪里:grep '.* DONE' 测试文件:Wed Jan 15 10:36:16 MYT 2014, StartInstall, MOB_CHARACTER_4.3.2B188, OK
Wed Jan 15 10:36:21 MYT 2014, StartInstall, GAME_TILES_7.3.2B467, OK
Wed Jan 15 10:36:21 MYT 2014, StartInstall, GAME_TILES_7.3.2B467, OK
Wed Jan 15 10:37:33 MYT 2014, EndInstall, GAME_TILES_7.3.2B467, DONE
Wed Jan 15 10:37:35 MYT 2014, StartInstall, MOVIE_CUTSCENE_4.3.2B246, OK
Wed Jan 15 10:37:35 MYT 2014, StartInstall, MOVIE_CUTSCENE_4.3.2B246, OK
Wed Jan 15 10:38:21 MYT 2014, EndInstall, MOVIE_CUTSCENE_4.3.2B246, DONE
Wed Jan 15 10:38:59 MYT 2014, EndInstall, MOB_CHARACTER_4.3.2B188, DONE
Wed Jan 15 10:39:00 MYT 2014, StartPatch, GAME_TILES_7.3.2.ServicePackB1, OK
Wed Jan 15 10:39:00 MYT 2014, StartPatch, GAME_TILES_7.3.2.ServicePackB1, OK
Wed Jan 15 10:39:07 MYT 2014, EndPatch, GAME_TILES_7.3.2.ServicePackB1, DONE
Wed Jan 15 10:39:08 MYT 2014, StartPatch, GAME_TILES_7_3_2_3B1_Server, OK
Wed Jan 15 10:39:08 MYT 2014, StartPatch, GAME_TILES_7_3_2_3B1_Server, OK
Wed Jan 15 10:39:16 MYT 2014, EndPatch, GAME_TILES_7_3_2_3B1_Server, DONE
Wed Jan 15 10:39:16 MYT 2014, StartPatch, GAME_TILES_7_3_2_3B1_Client, OK
Wed Jan 15 10:39:16 MYT 2014, StartPatch, GAME_TILES_7_3_2_3B1_Client, OK
Wed Jan 15 10:39:23 MYT 2014, EndPatch, GAME_TILES_7_3_2_3B1_Client, DONE
Wed Jan 15 10:39:24 MYT 2014, StartPatch, GAME_TILES_7.3.2.1B1, OK
Wed Jan 15 10:39:24 MYT 2014, StartPatch, GAME_TILES_7.3.2.1B1, OK
Wed Jan 15 10:39:34 MYT 2014, EndPatch, GAME_TILES_7.3.2.1B1, DONE
Wed Jan 15 10:39:35 MYT 2014, StartPatch, GAME_TILES_7.3.2.1B1_simulator, OK
Wed Jan 15 10:39:35 MYT 2014, StartPatch, GAME_TILES_7.3.2.1B1_simulator, OK
Wed Jan 15 10:39:45 MYT 2014, EndPatch, GAME_TILES_7.3.2.1B1_simulator, DONE
Wed Jan 15 10:39:46 MYT 2014, StartPatch, MOVIE_CUTSCENE_4.3.2.1B1, OK
Wed Jan 15 10:39:46 MYT 2014, StartPatch, MOVIE_CUTSCENE_4.3.2.1B1, OK
Wed Jan 15 10:39:53 MYT 2014, EndPatch, MOVIE_CUTSCENE_4.3.2.1B1, DONE
Wed Jan 15 10:39:54 MYT 2014, StartPatch, MOB_CHARACTER_4.3.2.1B1, OK
Wed Jan 15 10:39:54 MYT 2014, StartPatch, MOB_CHARACTER_4.3.2.1B1, OK
Wed Jan 15 10:40:03 MYT 2014, EndPatch, MOB_CHARACTER_4.3.2.1B1, DONE
Wed Jan 15 10:40:04 MYT 2014, StartPatch, GAME_TILES_7.3.2.2B1_Server, OK
Wed Jan 15 10:40:04 MYT 2014, StartPatch, GAME_TILES_7.3.2.2B1_Server, OK
Wed Jan 15 10:40:12 MYT 2014, EndPatch, GAME_TILES_7.3.2.2B1_Server, DONE
Wed Jan 15 10:40:13 MYT 2014, StartPatch, GAME_TILES_7.3.2.2B1_Client, OK
Wed Jan 15 10:40:13 MYT 2014, StartPatch, GAME_TILES_7.3.2.2B1_Client, OK
Wed Jan 15 10:40:21 MYT 2014, EndPatch, GAME_TILES_7.3.2.2B1_Client, DONE
Wed Jan 15 10:40:22 MYT 2014, StartPatch, GAME_TILES_7.3.2.4B2, OK
Wed Jan 15 10:40:22 MYT 2014, StartPatch, GAME_TILES_7.3.2.4B2, OK
Wed Jan 15 10:40:32 MYT 2014, EndPatch, GAME_TILES_7.3.2.4B2, DONE
Wed Jan 15 10:40:33 MYT 2014, StartPatch, MOB_CHARACTER_4.3.2.2B1, OK
Wed Jan 15 10:40:33 MYT 2014, StartPatch, MOB_CHARACTER_4.3.2.2B1, OK
Wed Jan 15 10:40:42 MYT 2014, EndPatch, MOB_CHARACTER_4.3.2.2B1, DONE
Wed Jan 15 10:40:43 MYT 2014, StartPatch, MOVIE_CUTSCENE_4.3.2.2B3, OK
Wed Jan 15 10:40:43 MYT 2014, StartPatch, MOVIE_CUTSCENE_4.3.2.2B3, OK
Wed Jan 15 10:40:50 MYT 2014, EndPatch, MOVIE_CUTSCENE_4.3.2.2B3, DONE
Wed Jan 15 10:40:51 MYT 2014, StartPatch, MOB_CHARACTER_4.3.2.12B2, OK
Wed Jan 15 10:40:51 MYT 2014, StartPatch, MOB_CHARACTER_4.3.2.12B2, OK
Wed Jan 15 10:40:51 MYT 2014, EndPatch, MOB_CHARACTER_4.3.2.12B2, DONE
Wed Jan 15 10:40:52 MYT 2014, StartPatch, GAME_TILES_7.3.2.23B2, OK
Wed Jan 15 10:40:52 MYT 2014, StartPatch, GAME_TILES_7.3.2.23B2, OK
Wed Jan 15 10:40:52 MYT 2014, EndPatch, GAME_TILES_7.3.2.23B2, DONE
Wed Jan 15 10:40:53 MYT 2014, StartPatch, MOB_CHARACTER_4.3.2.13B1, OK
Wed Jan 15 10:40:53 MYT 2014, StartPatch, MOB_CHARACTER_4.3.2.13B1, OK
Wed Jan 15 10:41:07 MYT 2014, EndPatch, MOB_CHARACTER_4.3.2.13B1, DONE
Wed Jan 15 10:41:07 MYT 2014, StartPatch, MOB_CHARACTER_4.3.2.17B3, OK
Wed Jan 15 10:41:07 MYT 2014, StartPatch, MOB_CHARACTER_4.3.2.17B3, OK
Wed Jan 15 10:41:08 MYT 2014, EndPatch, MOB_CHARACTER_4.3.2.17B3, DONE
Wed Jan 15 10:41:09 MYT 2014, StartPatch, GAME_TILES_7.3.2.30B4, OK
Wed Jan 15 10:41:09 MYT 2014, StartPatch, GAME_TILES_7.3.2.30B4, OK
Wed Jan 15 10:41:09 MYT 2014, EndPatch, GAME_TILES_7.3.2.30B4, DONE
Wed Jan 15 10:41:10 MYT 2014, StartPatch, GAME_TILES_7.3.2.41B1, OK
Wed Jan 15 10:41:10 MYT 2014, StartPatch, GAME_TILES_7.3.2.41B1, OK
Wed Jan 15 10:41:10 MYT 2014, EndPatch, GAME_TILES_7.3.2.41B1, DONE
Wed Jan 15 10:41:11 MYT 2014, StartPatch, MOB_CHARACTER_4.3.2.13B2, OK
Wed Jan 15 10:41:11 MYT 2014, StartPatch, MOB_CHARACTER_4.3.2.13B2, OK
Wed Jan 15 10:41:26 MYT 2014, EndPatch, MOB_CHARACTER_4.3.2.13B2, DONE
Wed Jan 15 10:41:27 MYT 2014, StartPatch, MOB_CHARACTER_4.3.2.16B1, OK
Wed Jan 15 10:41:27 MYT 2014, StartPatch, MOB_CHARACTER_4.3.2.16B1, OK
Wed Jan 15 10:41:29 MYT 2014, EndPatch, MOB_CHARACTER_4.3.2.16B1, DONE
Wed Jan 15 10:41:30 MYT 2014, StartPatch, MOB_CHARACTER_4.3.2.22B2, OK
Wed Jan 15 10:41:30 MYT 2014, StartPatch, MOB_CHARACTER_4.3.2.22B2, OK
Wed Jan 15 10:41:30 MYT 2014, EndPatch, MOB_CHARACTER_4.3.2.22B2, DONE
Wed Jan 15 10:41:31 MYT 2014, StartPatch, MOB_CHARACTER_4.3.2.24B2, OK
Wed Jan 15 10:41:31 MYT 2014, StartPatch, MOB_CHARACTER_4.3.2.24B2, OK
Wed Jan 15 10:41:31 MYT 2014, EndPatch, MOB_CHARACTER_4.3.2.24B2, DONE
Wed Jan 15 10:41:32 MYT 2014, StartPatch, MOB_CHARACTER_4.3.2.25B2, OK
Wed Jan 15 10:41:32 MYT 2014, StartPatch, MOB_CHARACTER_4.3.2.25B2, OK
Wed Jan 15 10:41:32 MYT 2014, EndPatch, MOB_CHARACTER_4.3.2.25B2, DONE
Wed Jan 15 10:41:33 MYT 2014, StartPatch, MOB_CHARACTER_4.3.2.28B2, OK
Wed Jan 15 10:41:33 MYT 2014, StartPatch, MOB_CHARACTER_4.3.2.28B2, OK
Wed Jan 15 10:41:33 MYT 2014, EndPatch, MOB_CHARACTER_4.3.2.28B2, DONE
Wed Jan 15 10:41:34 MYT 2014, StartPatch, GAME_TILES_7.3.2.40B1, OK
Wed Jan 15 10:41:34 MYT 2014, StartPatch, GAME_TILES_7.3.2.40B1, OK
Wed Jan 15 10:41:34 MYT 2014, EndPatch, GAME_TILES_7.3.2.40B1, DONE
Wed Jan 15 10:41:35 MYT 2014, StartPatch, GAME_TILES_7.3.2.43B2, OK
Wed Jan 15 10:41:35 MYT 2014, StartPatch, GAME_TILES_7.3.2.43B2, OK
Wed Jan 15 10:41:36 MYT 2014, EndPatch, GAME_TILES_7.3.2.43B2, DONE
Wed Jan 15 10:41:36 MYT 2014, StartPatch, MOB_CHARACTER_4.3.2.32B5, OK
Wed Jan 15 10:41:36 MYT 2014, StartPatch, MOB_CHARACTER_4.3.2.32B5, OK
Wed Jan 15 10:41:37 MYT 2014, EndPatch, MOB_CHARACTER_4.3.2.32B5, DONE
Wed Jan 15 10:41:37 MYT 2014, StartPatch, GAME_TILES_7.3.2.33B3, OK
Wed Jan 15 10:41:37 MYT 2014, StartPatch, GAME_TILES_7.3.2.33B3, OK
Wed Jan 15 10:41:38 MYT 2014, EndPatch, GAME_TILES_7.3.2.33B3, DONE
Wed Jan 15 10:41:39 MYT 2014, StartPatch, MOB_CHARACTER_4.3.2.42B4, OK
Wed Jan 15 10:41:39 MYT 2014, StartPatch, MOB_CHARACTER_4.3.2.42B4, OK
Wed Jan 15 10:41:39 MYT 2014, EndPatch, MOB_CHARACTER_4.3.2.42B4, DONE
Wed Jan 15 10:41:40 MYT 2014, StartPatch, GAME_TILES_7.3.2.62B1_Server, OK
Wed Jan 15 10:41:40 MYT 2014, StartPatch, GAME_TILES_7.3.2.62B1_Server, OK
Wed Jan 15 10:41:51 MYT 2014, EndPatch, GAME_TILES_7.3.2.62B1_Server, DONE
Wed Jan 15 10:41:53 MYT 2014, StartPatch, GAME_TILES_7.3.2.62B1_Client, OK
Wed Jan 15 10:41:53 MYT 2014, StartPatch, GAME_TILES_7.3.2.62B1_Client, OK
Wed Jan 15 10:42:02 MYT 2014, EndPatch, GAME_TILES_7.3.2.62B1_Client, DONE
Wed Jan 15 10:42:03 MYT 2014, StartPatch, MOVIE_CUTSCENE_4.3.2.15B1, OK
Wed Jan 15 10:42:03 MYT 2014, StartPatch, MOVIE_CUTSCENE_4.3.2.15B1, OK
Wed Jan 15 10:42:12 MYT 2014, EndPatch, MOVIE_CUTSCENE_4.3.2.15B1, DONE
Wed Jan 15 10:42:12 MYT 2014, StartPatch, MOB_CHARACTER_4.3.2.32B7, OK
Wed Jan 15 10:42:12 MYT 2014, StartPatch, MOB_CHARACTER_4.3.2.32B7, OK
Wed Jan 15 10:42:23 MYT 2014, EndPatch, MOB_CHARACTER_4.3.2.32B7, DONE
Wed Jan 15 10:42:24 MYT 2014, StartPatch, GAME_TILES_7.3.2.66B4, OK
Wed Jan 15 10:42:24 MYT 2014, StartPatch, GAME_TILES_7.3.2.66B4, OK
Wed Jan 15 10:42:25 MYT 2014, EndPatch, GAME_TILES_7.3.2.66B4, DONE
Wed Jan 15 10:42:26 MYT 2014, StartPatch, MOB_CHARACTER_4.3.2.55B1, OK
Wed Jan 15 10:42:26 MYT 2014, StartPatch, MOB_CHARACTER_4.3.2.55B1, OK
Wed Jan 15 10:42:35 MYT 2014, EndPatch, MOB_CHARACTER_4.3.2.55B1, DONE
Wed Jan 15 10:42:36 MYT 2014, StartPatch, GAME_TILES_7.3.2.68B1, OK
Wed Jan 15 10:42:36 MYT 2014, StartPatch, GAME_TILES_7.3.2.68B1, OK
Wed Jan 15 10:42:37 MYT 2014, EndPatch, GAME_TILES_7.3.2.68B1, DONE
Wed Jan 15 10:42:38 MYT 2014, StartPatch, MOB_CHARACTER_4.3.2.57B1, OK
Wed Jan 15 10:42:38 MYT 2014, StartPatch, MOB_CHARACTER_4.3.2.57B1, OK
Wed Jan 15 10:42:45 MYT 2014, EndPatch, MOB_CHARACTER_4.3.2.57B1, DONE
【问题讨论】:
-
我不确定你只能用 bash 来做到这一点,或者至少不能有效地做到这一点,你需要的是一个 hashmap/dictionary 数据结构,据我所知 bash 缺乏,你可以实现一个真正的使用字典执行此操作的简单 python 脚本