Удалить строку с рисунком
Вопрос
Привет! Я хочу удалить строку из файла, которая соответствует определенному шаблону. код, который я использую,
BEGIN {
FS = "!";
stopDate = "date +%Y%m%d%H%M%S";
deletedLineCtr = 0; #diagnostics counter, unused at this time
}
{
if( $7 < stopDate )
{
deletedLineCtr++;
}
else
print <*>
}
Код говорит, что в файле есть строки "! " Разделенное и 7-е поле представляет собой формат даты ггггммдччммсс. Скрипт удаляет строку, дата которой меньше системной даты. Но это не работает. Кто-нибудь может сказать мне причину?
Решение
Должно ли быть назначено назначение awk (1) во вторник? Действительно, awk ?? : -)
Ладно, я не был точно уверен, за кем вы были, поэтому я догадался Эта awk-программа получает текущее время дня, а затем удаляет каждую строку в файле меньше этого. Я оставил одну отладочную печать в.
BEGIN {
FS = "!"
stopDate = strftime("%Y%m%d%H%M%S")
print "now: ", stopDate
}
{ if ($7 >= stopDate) print $ cat t2.data
!!!!!!20080914233848
!!!!!!20090914233848
!!!!!!20100914233848
$ awk -f t2.awk < t2.data
now: 20090914234342
!!!!!!20100914233848
$
}
<Ч>
<*> Другие советы
вызовите date
первым, чтобы передать отформатированную дату в качестве параметра:
awk -F'!' -v stopdate=$( date +%Y%m%d%H%M%S ) '
$7 < stopdate { deletedLineCtr++; next }
{print}
END {do something with deletedLineCrt...}
'
Возможно, вам потребуется выполнить команду date - возможно, с обратными галочками - чтобы получить дату в stopDate. Если вы напечатали stopDate с таким кодом, как он написан, он будет содержать «дату + ...», а не строку цифр. Это коренная причина вашей проблемы.
К сожалению ...
Я не могу найти никаких доказательств того, что обратные галочки работают в любой версии awk (старый awk, новый awk, GNU awk). Итак, вам нужно либо перенести код в Perl (Perl изначально разрабатывался как «awk-killer» - и все еще включает в себя a2p
для преобразования сценариев awk в Perl), либо вам нужно пересмотреть, как дата установлена.
Увидев ответ @ DigitalRoss, функция strftime ()
в gawk
предоставит вам необходимое форматирование (отметьте «info gawk», как я это сделал).
После исправления вы должны удалить нужные строки.