2015-08-16 3 views
1

У меня есть файл журнала, который выглядит следующим образом:Как записать файл журнала базы данных MySQL

11:34:17 PM  CPU  %user  %nice %system %iowait %steal  %idle 
11:39:17 PM  all  0.09  0.00  0.07  0.09  0.00  99.75 
11:44:17 PM  all  0.04  0.00  0.03  0.00  0.00  99.92 
11:49:17 PM  all  1.49  0.00  0.49  0.06  0.00  97.96 
11:54:17 PM  all  23.27  0.00  0.51  0.05  0.03  76.14 
Average .... 

Мне нужно вставить дату, время,% пользователей,% система,% простоя в таблицу

row_id (int) | date (date) | time (time) | hostname (varchar) | user (decimal) | system (decimal) | idle (decimal) 

Мне нужно время, преобразованное в чч: мм: ii (24 часа). Столбец даты должен выводиться из файла журнала с именем YYYY-MM-DD_hostname_cpu.log

Как это сделать в сценарии оболочки? Мне нужна помощь в преобразовании времени и захват имени хоста, который может быть любой длиной от 1 и 20.

#: awk 'BEGIN { OFS = "," } FNR == 1 { d = substr(FILENAME, 1, 10) } $2 ~ /^[AP]M$/ && $3 != "CPU" { print d, $1 " " $2, $4+$5, $6, $7+$8+$9 }' *_cpu.log >> new_file.log 
+0

опубликовать таблицу DDL – amdixon

+0

http://stackoverflow.com/questions/17997558/bash-script-to-insert-values-in-mysql – M0rtiis

+0

@ M0rtiis вы могли бы предложить, используя временную таблицу и только вставив столбцы мне нужно ? – user1052448

ответ

0

Я могу дать вам свой род псевдокод:

Учитывая у вас есть несколько файлов для YYYY-MM -DD_hostname_cpu.log.

# Loop over each file 
for inputfile in `ls *.log`; do 
# grab date from filename 
date=echo $0 | awk -F"_" '{print $0}' 
# read line by line from file into variables 
cat $inputfile | while read time user system idle; do 
# Generate insert statements & pipe them to mysql. 
echo "insert into TABLE values (null, '$date', '$time', '$user', '$system', '$idle');" 
done | mysql -uUSER -pPASS database; 
done; 

Обычно для загрузки таких файлов в пакетном режиме, мы можем использовать Load Data Infile синтаксис MySQL, вы можете просмотреть несколько use cases.

+0

Будет ли MySQL автоматически конвертировать 12-часовое время в 24 часа? Я предполагаю, что запись файла журнала cpu в очищенную версию csv будет лучше. Затем я могу использовать load data infile для обработки всего содержимого, а не для нескольких вставок. – user1052448

+0

Также, как я могу получить имя хоста из имени файла для ввода в таблицу? (см. обновленный вопрос) – user1052448

+0

Используйте тот же 'awk', который вы использовали для захвата YYYY-MM-DD. Вы запускаете следующую команду и видите, что она возвращает: 'echo" YYYY-MM-DD_hostname_cpu.log "| awk -F "_" '{print $ 1 $ 2 $ 3}' ' –

Смежные вопросы