我有像
这样的条目[NGS|00219|17-10-2012 19:05:43:977|INFO]
在我的日志文件中,如何使用grep
或其他linux shell工具在此日志文件中找到唯一的时间值(不包括毫秒)
答案 0 :(得分:3)
这是打印独特时间的一种方法:
awk '!a[substr($2,0,8)]++ { print substr($2,0,8) }' file.txt
答案 1 :(得分:2)
当然,有很多方法 - 如何使用cut
,sed
和uniq
:
cut -d' ' -f2 logfile | sed -e 's/:[^:]*$//' | uniq
(只取空格后的内容,删除从最后一个冒号到结尾的所有内容,然后删除重复内容。)
或者,只使用sed
和uniq
:
sed -e 's/.*\ \(.*\):[^:]*$/\1/' logfile | uniq
答案 2 :(得分:2)
此脚本为您提供所有唯一的时间戳(仅限时间;不包括日期。所有重复的时间戳都将被忽略):
#!/bin/bash
awk -F'[: ]' '{print $2 ":" $3 ":" $4}' | sort | uniq -u
sort的使用是可选的(因为我假设日志是按时间顺序排列的)
如果您想要找到这些时间戳的整行,请告诉我。
答案 3 :(得分:2)
这在awk中非常简单
awk -F'|' '{
split($3, a, / /);
sub(/:[[:digit:]]+$/, "", a[2]);
arr[a[2]] = 1;
} END {
for (i in arr)
print i
}' file.log
您可以使用sub()
函数删除毫秒,然后将该值作为键添加到数组中。由于数组键是唯一的,因此将删除任何重复项。处理完成后,END块会遍历键并打印它们。
更新答案以排除日期。这是通过在时间戳上使用split()来删除日期部分来完成的。
答案 4 :(得分:1)
也许不是最优雅的:
awk '{print $2}' log.txt | cut -c 1-8 | uniq
答案 5 :(得分:1)
与egrep命令类似,您可以按如下方式使用grep:
grep -o -E'[[:digit:]] + [:] [[:digit:]] + [:] [[:digit:]] +'NGS.log | uniq
答案 6 :(得分:0)
我自己找到了一个很好的答案
egrep -o '[[:digit:]]+[:][[:digit:]]+[:][[:digit:]]+' NGS.log | uniq