Мне нужно изменить дату в файле CSV

Для файлов в одном каталоге (без рекурсии в подкаталоги )вам не нужно ничего, кроме простого цикла оболочки, например.

for f in./*.epub; do
  ebook-convert "$f" "${f%.epub}.txt"
done

Расширение параметра оболочки ${f%.epub}удаляет завершающий .epub, так что вы можете добавить расширение файла .txt.

-1
16.08.2017, 22:14
2 ответа

Вот одна из возможностей bash (опробована на Ubuntu 16.04.3 LTS)

Поместите свой csv в файл с именем yourfile.csv (или измените этот код ), затем запустите это:

#!/bin/bash
DATE=$1
for i in `seq 1 30`; do
        NEWDATE=`date -d"${DATE}+${i}day" +'%d/%m/%Y'`
        while read line; do
                echo $line | sed -u -r "s#^.{10}#${NEWDATE}#"
        done <yourfile.csv
done

Он будет генерировать +30 дней для КАЖДОЙ строки ввода, поэтому вам нужно иметь файл только с 1 строкой. Да, и он принимает дату в качестве параметра и будет генерировать +30 дней данных, начиная с этой даты.

Обновление для медленности :Попробуйте это, может у вас это работает быстрее:

#!/bin/bash
DATE=$1
let i=0
while read line; do
        let i=(i++ % 30)
        NEWDATE=`date -d"${DATE}+${i}day" +'%d/%m/%Y'`
        echo $line | sed -u -r "s#^.{10}#${NEWDATE}#"
done <yourfile.csv

1 млн строк будет составлять 1 млн строк, а не 1 млн — 30 млн.

0
28.01.2020, 05:12

Чтобы просто изменить количество дней в дате на некоторое фиксированное значение, например 15, вы можете

sed 's/[0-9]*/15/' your.csv

Если вы хотите изменить его в этом файле, добавьте параметр -i, если он поддерживается вашим sed.

Если вы хотите автоматизировать это для всех дней в течение многих месяцев, лучше используйте другой инструмент, например pythonили perl.

Обновление:Или повеселитесь sed:

sed -n 'p;x;s/^/0123456789_/;H;g
  :a
  s#\(.\)\(/.*\1\)\(.\)#\3\2\3#
  s/^0_/10/;s/^1_/20/;s/^2_/30/
  /^31.0[46]/s/1/2/;s#^32/0\(.\)\(.*\1\)\(.\)#01/0\3\2\3#
  P;\#^01/08#!ba' sample.csv

Это умножает каждую строку на каждый день, начиная с заданного 14/03до 01/08. Извините, что слишком много выпил.

0
28.01.2020, 05:12

Теги

Похожие вопросы