Я могу взять текст, который находится в csv, и сделайте его названием файла CSV

Я действительно надеюсь, что могу объяснить свою проблему. Ваша справка будет очень цениться.

У меня есть более чем 1 000 файлов CSV, который смотрит точно то же. Пример

Malian Aero Company,,,,,Aircraft,TZ-DDG,(Seed 1),,,Block-on (Z),18:19,      Landing (Z),,18:14,Date,06/06/16
2016  MALI  WEATHER  MODIFICATION  PROGRAM,,,,,,,,,,Block-off (Z),16:35,        Takeoff (Z),,16:41,Page,1
,Pilot:,Daniel Chacon,,Co-Pilot:,Malik,,Observer: ,,,Total Time,01:44,    Flight  Time    ,,01:33,Type,Seed
,,,,,,,,,,,,,,,,
Time,Cell,Event,LAT,LON,Alt.,Ejectable (Glacio),,BIP (Hygro),,Remarks,,,,,,
(UTC),No.,No.,(VOR),(DME),(Kft),0,Recycle,Burn,Recycle,,,,,,,
17:03,1,,12.55,-9.03,"8,000",,,1,,,,,,,,
17:06,,,12.67,-9.13,"8,000",,,1,,Updraft 500/900 ft/m,,,,,,
17:11,,,12.56,-9.11,"8,000",,,1,,,,,,,,
17:13,,,12.74,-9.07,"8,000",,,1,,,,,,,,
17:35,2,,13.31,-9.07,"9,000",,,1,,,,,,,,
17:39,,,13.53,-9.05,"9,000",,,1,,,,,,,,

Проблема, я хочу, чтобы название файла CSV было датой, что полет произошел, который в гармонии 2. В этом примере дата 06/06/16. Поэтому я хочу, чтобы название файла CSV было 20160606. Обратите внимание на изменения в порядке, который, вероятно, делает их немного более сбивающими с толку.

Как я могу сделать это автоматически?

0
задан 22 June 2017 в 05:55

3 ответа

Этот сценарий имеет два аргумента. Один для каталога для Ваших файлов CSV. Другой для новых файлов исправлен.

В случае, если у Вас есть больше чем один полет в тот же день, я добавил время как часть имени файла, чтобы гарантировать, что существует уникальное имя для каждого outfile.

Сценарий:

#!/bin/bash

indir=$HOME/indir
outdir=$HOME/outdir

[[ -d $outdir ]] || (echo "Outdir doesn't exist... Exiting..." ; exit) 

process() {
    file=$1
    datetime=$(head -1 $file|awk -F, '{print $NF"/"$(NF-2)}' | sed s#/#:#g)

    IFS=':' read -r -a arr <<< "$datetime"
    newname=$(printf "20${arr[2]}${arr[0]}${arr[1]}-${arr[3]}${arr[4]}.csv\n")
    echo "Name Change: $file -> $newname"
    sed -e '1,7d' < $file > $outdir/$newname
}

for i in "$indir"/*.csv; do
    process "$i"
done

Сводка сценария

Переменные и команды сценария:

  • indir: сценарий с помощью переменных indir для каталога файлов CSV.
  • oudir: Создайте этот каталог для новых файлов, которые будут скопированы.
  • Первая строка: Проверяет, каталог существует прежде, чем продолжить сценарий.
  • прибытие: переменная типа массив для разделения даты и создания нового имени файла.
  • sed: текстовый редактор командной строки, используемый для удаления нежелательных строк.
0
ответ дан 3 November 2019 в 01:27

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

Помещенный это в цикл для прохождения через всех файлов и Вы сделаны.

Для помощи Вам на пути:

cut --delim="," -f17 yourfile.csv | head -n1

Это выберет дату, теперь это - Ваша очередь преобразовать его.

-4
ответ дан 3 November 2019 в 01:27

Это, вероятно, собирается сделать Ребенка Jesus (или по крайней мере, Larry Wall) криком, но:

prename -n '
  use Text::CSV;
  use Time::Piece;
  open my $fh, "<", $_ or die "$_ : $!";
  eval {
    my $r = Text::CSV->new()->getline($fh);
    s{.*(?=\.csv)}{Time::Piece->strptime($r->[-1], "%d/%m/%y")->strftime("%Y%m%d")}e  if ($r);
    1;
  } 
  or do {
    print "$_ skipped (no valid date field found)\n"
  }
' *.csv
file1.csv renamed as 20160606.csv
file2.csv renamed as 20160623.csv
file3.csv skipped (no valid date field found)
file.csv : Permission denied at (eval 8) line 4.

Примечание:

  1. это предполагает, что дата находится в последнем столбце первой строки каждого файла
  2. это предполагает, что исходный формат даты "%d/%m/%y" но пример, который Вы дали, мог быть считан как "%m/%d/%y" - необходимо будет проверить и корректироваться при необходимости

Это должно пропустить файлы, из которых это не может проанализировать допустимую дату в ожидаемом месте: обработка ошибок для парсинга даты взята от Обработки исключений в Perl: Как иметь дело с фатальными ошибками во внешних модулях.

Удалите -n только, если/когда Вы убеждены, что это делает правильную вещь.

0
ответ дан 3 November 2019 в 01:27

Другие вопросы по тегам:

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