Удалить строку с рисунком - PullRequest
       16

Удалить строку с рисунком

1 голос
/ 15 сентября 2009

Привет, я хочу удалить строку из файла, которая соответствует определенному шаблону код, который я использую, это

BEGIN {
       FS = "!";
       stopDate = "date +%Y%m%d%H%M%S";
       deletedLineCtr = 0;   #diagnostics counter, unused at this time
      }
      {
     if( $7 < stopDate )
          {
           deletedLineCtr++;
          }
      else
           print $0
      }

Код говорит, что в файле есть строки "!" Разделенное и 7-е поле представляет собой формат даты ггггммдччммсс Скрипт удаляет строку, дата которой меньше системной даты. Но это не работает. Кто-нибудь может сказать мне причину?

Ответы [ 3 ]

2 голосов
/ 15 сентября 2009

Должно ли быть назначено назначение awk (1) во вторник? Действительно, awk ?? : -)

Хорошо, я не был уверен, что именно вы после, поэтому я сделал некоторые догадки. Эта awk-программа получает текущее время дня, а затем удаляет каждую строку в файле меньше этого. Я оставил один отладочный отпечаток.

BEGIN {
  FS = "!"
  stopDate = strftime("%Y%m%d%H%M%S")
  print "now: ", stopDate
}
{ if ($7 >= stopDate) print $0 }

$ cat t2.data
!!!!!!20080914233848
!!!!!!20090914233848
!!!!!!20100914233848
$ awk -f t2.awk < t2.data
now:  20090914234342
!!!!!!20100914233848
$ 
1 голос
/ 15 сентября 2009

вызов date первым, чтобы передать отформатированную дату в качестве параметра:

awk -F'!' -v stopdate=$( date +%Y%m%d%H%M%S ) '
    $7 < stopdate { deletedLineCtr++; next }
    {print}
    END {do something with deletedLineCrt...}
'
0 голосов
/ 15 сентября 2009

Возможно, вам потребуется выполнить команду date - возможно, с обратными галочками - чтобы получить дату в stopDate. Если вы напечатали stopDate с написанным кодом, он будет содержать «date + ...», а не строку цифр. Это коренная причина вашей проблемы.

К сожалению ...

Я не могу найти никаких доказательств того, что обратные галочки работают в любой версии awk (старый awk, новый awk, GNU awk). Итак, вам нужно либо перенести код на Perl (Perl изначально был разработан как «awk-killer» - и все еще включает a2p для преобразования сценариев awk в Perl), либо вам нужно пересмотреть, как устанавливается дата. 1006 *

Видя ответ @ DigitalRoss, функция strftime() в gawk предоставляет вам необходимое форматирование (отметьте «info gawk», как я).

Исправив это, вы должны удалить правильные строки.

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