Как изменить вставку сценария в mysql без первой строки/заголовка (ДАТА, ПУНКТ)?

DATE,ITEM 
2017-11-06 ,01001
2017-11-06 ,01005
2017-11-06 ,01013

--- Я использую с этим скриптом----


#!/bin/bash

IFS=,
while read DATE ITEM

do
        echo "INSERT INTO DB (DATE, item) VALUES ('$DATE', '$item');"


person Shoma    schedule 07.11.2017    source источник


Ответы (2)


Используйте awk для очистки ввода, а затем передайте значения с нулевым разделителем в while-loop, как показано ниже:

# cat 47153204.txt #note that I have added extra spaces/commas to make things more difficult

DATE,ITEM 
2017-11-06,01001
2017-11-06, 01005
2017-11-06, 01013

# awk -F '[ ,]+' 'NR>1{printf "%s\0%s\0",$1,$2}' 47153204.txt |
while IFS= read -r -d '' date time
do
# Use the date & time values to construct the query.
done
person sjsam    schedule 07.11.2017

Следующая команда сначала отформатирует ваш входной файл и заменит «,» вкладками, чтобы awk мог правильно его обработать.

Затем awk начнет обрабатывать вывод из второй строки, а затем создаст ваши запросы на вставку.

sed 's/ ,/\t/g' test.txt | awk '{if(NR>=2) print "INSERT INTO DB (DATE, item) VALUES(\x27"$1"\x27, \x27"$2"\x27);";}' > my_insert_queries.out

Вы также можете определить другой разделитель полей для awk:

В командной строке awk FS можно указать как -F <sep> (or -v FS=<sep>)

вместо использования sed для увеличения скорости обработки.

awk -F' ,' '{if(NR>=2) print "INSERT INTO DB (DATE, item) VALUES(\x27"$1"\x27, \x27"$2"\x27);";}' test.txt > my_insert_queries.out
person Allan    schedule 07.11.2017
comment
В sed нет ничего, чего нельзя было бы сделать с помощью awk здесь. Конвейер вывода sed в awk является излишним, и его можно избежать. - person sjsam; 07.11.2017
comment
да, именно поэтому я предложил изменить разделитель полей :) - person Allan; 07.11.2017
comment
Или точно так же sed -n '2,$s/\(.*\),\(.*\)/'"INSERT INTO DB(DATE, item) VALUES('\\1','\\2')/p" | sql - person tripleee; 07.11.2017