从文本文件中只获取日期

时间:2014-09-25 06:17:30

标签: linux

仅从具有日期格式的多个日志文件中获取日期。

例如:日志文件1

Info    10/24/2013  6:42:18 PM  Core    1   Initializing appilcation Novicorp WinToFlash 0.7.0048 beta
Info    10/24/2013  6:42:18 PM  Core    2   Started from D:\system use\os\Win To Flash 0.7.0048 Beta\WinToFlash.exe
Info    10/24/2013  6:42:18 PM  Core    3   Loading options
Info    10/24/2013  6:42:18 PM  Options 0   Options loaded
Warning 10/24/2013  6:42:19 PM  License 0   License file doesn't exists - EULA status reset
Error   10/24/2013  6:42:30 PM  Network 0   The server does not respond
Error   10/24/2013  6:42:49 PM  Network 0   The server does not respond
Error   10/24/2013  6:42:49 PM  Network 0   The server does not respond
Info    10/24/2013  6:45:02 PM  Core    9   Application termainated

例如:日志文件2

09/22/2014 08:10:24.363 [1876]: Uninstalling assembly System.Management.Automation, Version=3.0.0.0, Culture=Neutral, PublicKeyToken=31bf3856ad364e35
09/22/2014 08:10:24.363 [1876]: Executing command from offline queue: install "System"
09/22/2014 08:10:24.379 [1876]: Uninstalling assembly PresentationCore, Version=4.0.0.0
09/22/2014 08:10:24.379 [1876]: Executing command from offline queue: install

在上面的例子中,两个例子给出了不同的列,但我只想得到日期

我的编码:

#!/bin/sh
for file_name in /media/saraswathy/7284EA0684E9CD23/Log/data/input_files/*.log;
do
while read file_line
do
echo $file_line | date +%Y:%m:%d -d "1 day ago"

done<$file_name
done

请帮帮我

2 个答案:

答案 0 :(得分:2)

grep可以帮到你。假设日期采用以下格式:mm/dd/yyyy,那么您可以使用:
grep '[0-9]\{2\}/[0-9]\{2\}/[0-9]\{4\}' -o

说明:

  • [0-9]:解析数字。
  • \{2\}:重复2次。 \用于转义括号。
  • -o:仅打印分析的部分(而不是打印整行)

实施例

[pengyu@GLaDOS tmp]$ grep '[0-9]\{2\}/[0-9]\{2\}/[0-9]\{4\}' -o a.log
10/24/2013
10/24/2013
10/24/2013
10/24/2013
10/24/2013
10/24/2013
10/24/2013
10/24/2013
10/24/2013

答案 1 :(得分:0)

可以使用awk工具轻松完成 - 例如您可以使用许多其他选项(分隔符,正则表达式等)打印您想要的任何列。只需在$ sign后放置列号(从1开始索引)。

$ awk '{print $2}' example1.log
10/24/2013
10/24/2013
10/24/2013
10/24/2013
10/24/2013
10/24/2013
10/24/2013
10/24/2013
10/24/2013

$ awk '{print $1}' example2.log
09/22/2014
09/22/2014
09/22/2014
09/22/2014

同样的效果也可以用例如猫或瓷砖和烟斗:

$ cat example1.log | awk '{print $2}'
$ tail example2.log | awk '{print $1}'