Перечисление файлов в массив, а затем преобразование их в текстовые файлы разделителя каналов

У меня есть пара файлов.dpff. Я хочу сделать следующее в Solaris 10 Sparc

  1. Прослушайте / подождите, пока директор /cm/vic/digital/orcr/vic_export примет один или несколько файлов.dpff. затем
  2. Удалите символ ^M во всех файлах.dpff
  3. добавить путь к файлу в первый столбец всех файлов.dpff, путь к файлу которого: /cm/vic/digital/orcr/vic_export
  4. Файлы.dpff являются текущими в файле с разделителями табуляции, поэтому я хочу затем преобразовать их в файл с разделителями канала.
  5. Наконец, переименуйте каждый файл с отметкой времени, например. 20140415140648.txt

Мой код ниже. Я не в состоянии ожидаемого результата.

Пожалуйста посоветуй.

#! /bin/bash

declare -a files
declare -a z

i=1
z=`ls *.dpff`
c=`ls *.dpff`|wc -l
echo "Start listening for the  .dpff files"
while :;
        do [ -f /cm/vic/digital/orcr/vic_export/*.dpff ]
        sleep 60;

echo " Assing array with list of .dpff files"
for i in c
    do
        dirs[i]=$z
    done

echo " Listing files"

for i in c
    do
        sed   's/^/\/cm\/vic\/digital\/orcr\/\vic_export\//' $files[i] > `date +"%Y%m%d%H%M%S"`.dpfff
        tr '\t' '|' < $files[i] > t.txt

    done
done

1 ответ

Трудно быть уверенным в том, что вы действительно спрашиваете: ваше описание и ваш код на самом деле не совпадают. Тем не менее, как это?

#! /bin/bash

declare -a files files_with_timestamp

echo "Start listening for the  .dpff files"
while :; do

    # Listen/wait for the director /cm/vic/digital/orcr/vic_export for the
    # arrival of one or more .dpff file 
    while :; do
        files=( /cm/vic/digital/orcr/vic_export/*.dpff )
        (( ${#files[@]} > 0 )) && break
        sleep 60;
    done

    timestamp=$( date "+%Y%m%d%H%M%S" )
    for file in "${files[@]}"; do
        sed -i '
            # Remove the ^M character in all the .dpff files  
            s/\r//g

            # add the file path to the first column of all .dpff files 
            s@^@/cm/vic/digital/orcr/vic_export/@

            # .dpff files are currenlty in tab delimited file so I want to then
            # convert them to the pipe delimited file.
            s/\t/|/g
        ' "$file"
        newfile="${file%.dpff}.$timestamp.dpff"
        mv "$file" "$newfile"
        files_with_timestamp+=( "$newfile" )
    done

    echo ".dpff files converted:"
    printf "%s\n" "${files_with_timestamp[@]}"
done
Другие вопросы по тегам