я должен выполнить относительно простую задачу, в основном у меня есть огромное количество файлов в следующем форматеСомнения эффективности Баш скрипт
«2014-01-27», «7:20:38»,» «данные», «данные», «данные»
В основном я хотел бы извлечь первые 2 поля, преобразовать их в дату эпохи unix, добавить к нему 6 часов (разницу в часовом поясе) и заменить первые 2 оригинала столбцы с полученными миллисекундами (эпоха unix, начиная с 19700101, преобразованная в мельницы) Я написал сценарий, который отлично работает, но проблема в том, что это очень медленно, мне нужно запустить это более 150 файлов с общим количеством строк более 5.000.000 и я был wonderin г, если у вас какие-либо советы о том, как я мог бы сделать это быстрее, вот она:
#!/bin/bash
function format()
{
while read line; do
entire_date=$(echo ${line} | cut -d"," -f1-2);
trimmed_date=$(echo ${entire_date} | sed 's/"//g;s/,/ /g');
seconds=$(date -d "${trimmed_date} + 6 hours" +%s);
millis=$((${seconds} * 1000));
echo ${line} | sed "s/$entire_date/\"$millis\"/g" >> "output"
done < $*
}
format $*
Эпоха Unix - это секунды, а не миллисекунды. Это традиционно (long?) Целое число, но представления с десятичной частью были использованы для представления подсеточной точности. – tripleee
Вы должны использовать '' $ @ "' вместо '$ *'. В настоящее время ваш код не может обрабатывать имена файлов с пробелами в них и т. Д. – tripleee