awk конвертирует число в формат даты, чтобы выбрать строку больше, чем указано c ммгг - PullRequest
0 голосов
/ 18 февраля 2020

ВХОД :

test,1120,1
test,1219,2

Ожидаемый результат

test,1120,1

Цель : попытка напечатать строку, где $2 формат mmyy больше, чем 1020, например.

Я пробовал со следующим:

awk -F, '{ if ( $2 > 1020 ) { print $0 }}' file, который не даст ожидаемого результата, потому что это неподвижное число et c .. 1219 больше 1020 .

Ответы [ 2 ]

1 голос
/ 18 февраля 2020

РЕДАКТИРОВАТЬ: Так как OP упомянул, что теперь, если даты требуют меньше, чем предоставленный ввод в этом случае, можно попробовать следующее.

awk -v val="1020" '
BEGIN{
  FS=OFS=","
  user_year=substr(val,3)
  user_month=substr(val,1,2)
}
{
  year=substr($2,3)
  month=substr($2,1,2)
  if(year==user_year){
   if(month<user_month){
     print
   }
  }
  else if(year<user_year){
     print
  }
}
' Input_file


Не могли бы вы попробовать следующее. Я создал переменную с именем val, которая будет иметь значение, которое пользователь должен сравнить со всеми строками файла Input_file. В этом случае он установлен на 1020

awk -v val="1020" '
BEGIN{
  FS=OFS=","
  user_year=substr(val,3)
  user_month=substr(val,1,2)
}
{
  year=substr($2,3)
  month=substr($2,1,2)
  if(year==user_year){
    if(month>user_month){
      print
    }
  }
  if(year>user_year){
      print
  }
}
' Input_file
1 голос
/ 18 февраля 2020

Предполагая, что 2-е поле всегда содержит 4 цифры, как насчет:

awk -F, 'substr($2, 3, 2) substr($2, 1, 2) > 2010' input

Обратите внимание, что я интерпретировал слово bigger как later, что означает 0921 означает bigger чем 1020. Если мое предположение неверно, пожалуйста, дайте мне знать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...