簡體   English   中英

如果時間戳大於一分鍾則打印

[英]print if timestamp is greater than a minute

我有包含 8 個字段的輸入行。 像這樣:

Field1  Field2  Field3  Field4  Field5  Field6  Field7    Field8
name    ID      number  stuff   Jan15   ?       00:00:00  some command 

其中一個字段 Field7 是一個時間戳,例如00:00:00我想“掃描”第 7 個字段,看看時間是否大於一分鍾,即如果第 7 個字段大於 00:01: 00.

如果第 7 個字段更大,我想將字段 2 7 和 8 的值打印到文件中。 我對 awk 的經驗很少,但據我所知,這是我想使用的工具。

EDIT1:要使用ps命令運行它,請使用它,例如:

ps -ef | awk '
{
  split($7,array,":")
  tot_time=array[2]*60+array[3]
  if(tot_time>60){
    print $2,$7,$8
  }
  tot_time=""
  delete array
}
'

還要涵蓋進程運行時間為 1 小時且不到一分鍾的 1 個邊緣情況:) 嘗試以下操作。

ps -ef | awk '
{
  split($7,array,":")
  tot_time=array[1]*3600+array[2]*60+array[3]
  if(tot_time>60){
    print $2,$7,$8
  }
  tot_time=""
  delete array
}
'


你能不能試試以下。 將第 7 列拆分為 3 個不同的部分(小時、分鍾和秒),分隔符為:然后從中計算分鍾以檢查其值是否大於 60。

awk '
{
  split($7,array,":")
  tot_time=array[2]*60+array[3]
  if(tot_time>60){
    print $2,$7,$8
  }
  tot_time=""
  delete array
}
'   Input_file


用樣品測試:

cat Input_file
Field1  Field2  Field3  Field4  Field5  Field6  Field7  Field8
xxx     xxx     xxx     xxx     xxx     xxx     00:01:01     xxx
xxx     xxx     xxx     xxx     xxx     xxx     00:00:48    xxx

運行代碼后,以下將是輸出。

awk '
{
  split($7,array,":")
  tot_time=array[2]*60+array[3]
  if(tot_time>60){
    print $2,$7,$8
  }
  tot_time=""
  delete array
}
'  Input_file
xxx 00:01:01 xxx

假設字段由空格或制表符分隔,如何:

awk '$7 > "00:01:00" {print $2, $7, $8}' file

輸入

name1   ID1      number1  stuff   Jan15   ?       00:00:59  somecommand1
name2   ID2      number2  stuff   Jan15   ?       00:01:00  somecommand2
name3   ID3      number3  stuff   Jan15   ?       00:01:01  somecommand3
name4   ID4      number3  stuff   Jan15   ?       00:02:00  somecommand4

輸出

ID3 00:01:01 somecommand3
ID4 00:02:00 somecommand4

awk 主要將兩個字符串作為strings進行比較,除非兩者都是數值或者一個是數字而另一個是數字字符串。
在這種情況下執行string comparison ,然后您可以直接比較 HH:MM:SS 表示中的時間字符串。

假設您的文件是空格/制表符分隔的,這應該可以解決問題:

awk '$7!~/^(00:01:00|00:00)/{print $2,$7,$8}' file > out_file

如果您有以下輸入文件:

Field1  Field2  Field3  Field4  Field5  Field6  Field7    Field8
name    ID      number  stuff   Jan15   ?       00:00:14  somecommand
name2   ID2     number2 stuff   Jan15   ?       00:00:30  somecommand2
name3   ID3     number3 stuff   Jan15   ?       00:01:30  somecommand3
name4   ID4     number4 stuff   Jan15   ?       01:01:30  somecommand4
name5   ID5     number5 stuff   Jan15   ?       01:00:00  somecommand5
name6   ID6     number6 stuff   Jan15   ?       00:01:00  somecommand5

您可以使用以下awk命令

awk '$7 !~ /(^00:00|00:01:00)/ || NR==1 {print $2,$7,$8}' f.in | column -t

它將給出輸出:

Field2  Field7    Field8
ID3     00:01:30  somecommand3
ID4     01:01:30  somecommand4
ID5     01:00:00  somecommand5

說明:

  • 基於正則表達式的方法
  • NR==1打印第一行(不需要的可以去掉這部分)
  • 該模式不是在00:00開始或不等於00:01:00 ,如果您將約束更改為大於或等於 1 分鍾,則可以將其刪除
  • 打印必填字段
  • column -t用於漂亮的輸出,可以刪除。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM