如何获得文件的最新出现以及如何在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按时间戳排序的主要内容,如果未能解决你的问题,请参考以下文章

如何使用-cp在unix上编译java

如何使用 UNIX shell 计算一个字母在文本文件中出现的次数?

我如何获得在 unix 域套接字中排队的数据报数量

如何使用 Unix 从一行中删除第二次出现

如何获得忽略回车的补丁?

C++:我将如何获得 unix 时间?