awk, приводящий к нулю в сценарии оболочки Unix - PullRequest
0 голосов
/ 19 сентября 2018

У меня есть этот файл на моем сервере, который мне нужен, чтобы получить определенный диапазон строк, используя указанные даты, поэтому я искал сценарий и придумал это.

19 Sep 2018 08:47:57,153#ad****#L****#2018-Sep-19 08:47:43 110#2018-Sep-19 
08:47:57 153#14.***sec
19 Sep 2018 09:00:25,582#jg****#L****#2018-Sep-19 09:00:22 658#2018-Sep-19 
09:00:25 582#2.***sec
19 Sep 2018 09:00:25,720#lr****#L****#2018-Sep-19 09:00:22 038#2018-Sep-19 
09:00:25 720#3.***sec
....

Я ввел эту команду в командной строке, и она хорошо работает:
awk '$0 >= "19 Sep 2018 09:00:00" && $0 <= "19 Sep 2018 09:05:00" '/home/../k../g../somelogfile.txt

но когда я манипулирую ею в сценарии и помещаю в нее переменныенет вывода.

todayl=$(date --date="19 Sept 2018 09:00:00AM")
t_i_f_o=$(date +"%d %b %Y %H:%M:%S" --date="$today")
t_f_m_a=$(date +"%d %b %Y %H:%M:%S" --date="$today + 5 minutes")

awk '$0 >= "$t_i_f_o" && $0 <= "$t_f_m_a" ' /home/m.../k.../t.../somelogfile1.txt > /home/m.../k.../t../f.../another1.txt #Tried this
awk '$0 >= "${t_i_f_o}" && $0 <= "${t_f_m_a}"' /home/m.../k.../t.../somefile2.txt > /home/m.../k.../t.../f.../another2.txt # and this

когда я смотрю на выходной файл, который представляет собой another1.txt и another2.txt, данных нет.что-то не так с тем, как я размещаю переменную?

1 Ответ

0 голосов
/ 19 сентября 2018

Вы должны правильно приложить свои строки.Вы хотите, чтобы переменная t_i_f_o была расширена с помощью bash, но вы хотите, чтобы $0 была расширена с помощью awk.
Также вам нужно установить LC_ALL=C или LC_TIME=C, иначе вы получите странные результаты на ПК с другимилокали (как мои).

export LC_ALL=C
todayl=$(date --date="19 Sep 2018 09:00:00AM")
t_i_f_o=$(date +"%d %b %Y %H:%M:%S" --date="$todayl")
t_f_m_a=$(date +"%d %b %Y %H:%M:%S" --date="$todayl + 5 minutes")
awk '$0 >= "'"$t_i_f_o"'" && $0 <= "'"$t_f_m_a"'"' /tmp/1

Но я "чувствую", что вы должны сравнивать только первое поле, отделенное '#', с датой, а не всю строку:

awk -F'#' '$1 >= "'"$t_i_f_o"'" && $1 <= "'"$t_f_m_a"'"' /tmp/1

Живая версия доступна на tutorialspoint .

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