печатать, если отметка времени больше минуты - PullRequest
3 голосов
/ 03 февраля 2020

У меня есть строки ввода, содержащие 8 полей. Вот так:

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

Одно из полей, Field7, является временной меткой, например: 00:00:00 Я бы хотел "отсканировать" это седьмое поле и посмотреть, больше ли время, чем одна минута, т.е. седьмое поле больше 00: 01: 00.

Если седьмое поле больше, я бы хотел вывести значения полей 2 7 и 8 в файл. У меня очень мало опыта работы с awk, но насколько я понимаю, это инструмент, который я хочу использовать.

Ответы [ 4 ]

5 голосов
/ 03 февраля 2020

РЕДАКТИРОВАТЬ1: Чтобы запустить его с помощью команды 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
4 голосов
/ 03 февраля 2020

Предполагая, что поля разделены пробелами или табуляциями, как о:

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

input :

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

output :

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

Awk в основном сравнивает две строки как strings, если только обе не являются числовыми значениями или одна не является цифрой c, а другая не является цифрой c строка.
В данном случае string comparison, то вы можете напрямую сравнить строки времени в представлении ЧЧ: ММ: СС.

3 голосов
/ 03 февраля 2020

Если ваш файл разделен пробелом / табуляцией, это должно сработать:

awk '$7!~/^(00:01:00|00:00)/{print $2,$7,$8}' file > out_file
0 голосов
/ 03 февраля 2020

Если у вас есть следующий входной файл:

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 для красивого вывода, может быть удалено.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...