Как удалить unix метку времени, указанную c данных из плоского файла - PullRequest
0 голосов
/ 24 января 2020

У меня есть огромный файл, содержащий список, подобный этому

email@domain.com^B1569521698
email2@domain.com,@2domain.com^B1569521798
email3@domain.com,test@2domain.com^B1569521898
email10000@domain.com^B1569521998
..
..

Файл называется / usr / local / email / whitelist

Число после ^ B является unix отметка времени

Мне нужно удалить из списка все строки, отметка времени которых меньше (например, 1569521898).

Я пытался использовать различные комбинации awk / sed без результата.

Ответы [ 2 ]

5 голосов
/ 24 января 2020

Символ ^B, который вы заметили, является управляющим символом . Первые 32 управляющих символа, которые являются кодами ASCII от 0 до 1FH, образуют специальный набор непечатных символов. Эти символы называются управляющими символами, поскольку эти символы выполняют различные операции управления принтером и дисплеем, а не отображают символы. Этот конкретный означает STX или Start of Text.

. Вы можете набирать контрольные символы в оболочке как: Ctrl + v Ctrl + b , или вы можете использовать восьмеричное представление напрямую (\002).

awk -F '\002' '($2 >= 1569521898)'
1 голос
/ 24 января 2020

Поскольку в вашем файле ввода_ есть управляющие символы, попробуйте выполнить один раз. Это написано и протестировано только с данными образцами.

awk '
match($0,/\002[0-9]+/){
  val=substr($0,RSTART+1,RLENGTH-1)
  if(val>=1569521898){ print }
  val=""
}
'  Input_file
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...