如何获得文件的最新出现以及如何在UNIX中使用AWK按时间戳排序

问题描述 投票:0回答:2

我正在使用此命令从一堆文件中获取行列表,这些文件包括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

有人面对这个并取得成功吗?

unix awk grep ls
2个回答
1
投票

更改此:

awk '/BEGIN/{print FILENAME,$1,$2,$8}' hb_2019*.log |sort|uniq

对此:

awk '/BEGIN/{out[FILENAME]=$1 OFS $2 OFS $8} END{for (fname in out) print fname, out[fname]}' hb_2019*.log

0
投票

您能不能尝试下面的步骤(由于缺少样本,所以没有对其进行测试。)>

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
© www.soinside.com 2019 - 2024. All rights reserved.