如何获得文件的最新出现以及如何在UNIX中使用AWK按时间戳排序
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何获得文件的最新出现以及如何在UNIX中使用AWK按时间戳排序相关的知识,希望对你有一定的参考价值。
我正在使用此命令从一堆文件中获取行列表,这些文件包括BEGIN并获得$ 1,$ 2,$ 8列以及文件名,并将它们添加到startdate.txt文件中。
awk '/BEGIN/ print FILENAME,$1,$2,$8' hb_2019*.log > sdate.txt
下面是结果
hb_20190927121800.log [2019-09-27 20:45:56] ser_message1
hb_20190927121800.log [2019-09-27 20:45:58] claim_response
hb_20190927121800.log [2019-09-27 20:46:00] compound_ingred
hb_20190927121800.log [2019-09-27 20:47:36] pha_ree
hb_20190930103448.log [2019-09-29 10:34:48] ser_message1
hb_20190930103448.log [2019-09-29 11:58:22] claim_response
hb_20190930103448.log [2019-09-29 14:17:28] mcompound_ingred
hb_20190930103448.log [2019-09-29 15:05:48] pha_ree
hb_20190930103450.log [2019-09-30 19:11:25] ser_message1
hb_20190930103450.log [2019-09-30 19:55:59] claim_response
hb_20190930103450.log [2019-09-30 20:17:11] compound_ingred
hb_20190930103450.log [2019-09-30 20:17:13] pha_ree
但是我只想要文件的一个最新结果,而不是所有列表
以下是我正在尝试的方法,但没有运气
awk '/BEGIN/ print FILENAME,$1,$2,$8' hb_2019*.log |sort|uniq > sdate.txt
有人面对这个并取得成功吗?
答案
更改此:
awk '/BEGIN/print FILENAME,$1,$2,$8' hb_2019*.log |sort|uniq
对此:
awk '/BEGIN/out[FILENAME]=$1 OFS $2 OFS $8 ENDfor (fname in out) print fname, out[fname]' hb_2019*.log
另一答案
您能不能尝试下面的步骤(由于缺少样本,所以没有对其进行测试。)>
awk '
BEGIN
OFS=","
FNR==1
if(prev)
print prev
prev=""
/BEGIN/
prev=FILENAME OFS $1 OFS $2 OFS $8
END
if(prev)
print prev
' hb_2019*.log
以上是关于如何获得文件的最新出现以及如何在UNIX中使用AWK按时间戳排序的主要内容,如果未能解决你的问题,请参考以下文章