2015-02-03 2 views
0

У меня есть куча csv-файлов в папке. Мне нужен сценарий sed/bash для выполнения каждого файла в папке:Sed/bash для добавления частичного имени файла и даты к новому имени файла в bash

Возьмите файл filename.csv, выполните скрипт с каждым файлом и вставьте результат выполнения в имя файла + CurrentDate.csv, где текущая дата это только дата без пробелов.

Например: abc.csv превращается в abc_02-03-15.csv после выполнения функции.

Я полагаю, что код будет выглядеть примерно так:

#!/bin/bash 
dir="/var/tmp/" 
now=$(date) 
for f in "$dir"/*; do 
    ScriptName 
    sed OriginalFileName > "OriginalFileName+$now.csv" 
done 

Пожалуйста посоветуйте и спасибо за помощь заранее.

ответ

3

Предполагая, что ваш сценарий фильтрации принимает ввод на стандартный ввод и записывает в стандартный вывод:

dir="/var/tmp/" 
now=$(date "+%Y-%m-%d") 
for f in "$dir"/*; do 
    ScriptName <"$f" >"${f}_$now.csv" 
done 

Как должно быть достаточно очевидно, в пределах цикла, $f относится к имени входа. Когда это заменяется на часть строки с символами, которые являются допустимыми именами переменных после нее, необходимо использовать фигурные скобки для устранения неоднозначности: $f_$now.csv будет искать переменную с именем f_, а не f.

Даты, здесь, представлены в формате ГГГГ-ММ-ДД. Это STRONGLY предпочтительнее DD-MM-YY или MM-DD-YY по нескольким причинам: он сортирует в лексическом порядке идентично его числовому порядку (поэтому инструменты, которые выполняют простой ASCII-сортировку, например ls, будут отображать файлы с именем таким образом, от новейшего до старейшего или самого старого и новейшего), и это однозначно для читателей, будь то страны, где DD-MM или MM-DD являются обычными.

+0

Это, похоже, работает внутри цикла for. Попытка сделать это за пределами цикла for немного проблематична. У меня есть простой скрипт: file1 = abc.csv, file2 = "$ {file1%. *}", Now = $ (date), file3 = $ file1_ $ file2, echo "$ file3". Это отображает только abc, а не abc, за которым следует дата. – ToofanHasArrived

+0

Я не совсем уверен, что вы имеете в виду. Не могли бы вы прояснить оставшуюся проблему (или ссылку на любой новый вопрос, если он выходит за рамки существующего вопроса)? –

+0

По существу, что я пытаюсь сделать, это отобразить файл + дату вне цикла. Коррекция из моего предыдущего комментария - file3 = $ file2_ $. echo " $ file3" показывает abc, но не показывает дату – ToofanHasArrived

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