列出要数组的文件,然后将它们转换为管道分隔符文本文件



我有几个.dpf文件。我想在Solaris 10 Sparc 中执行以下操作

  1. 监听/等待director/cm/vic/digital/orcr/vic_export,等待一个或多个.dpf文件的到来。那么
  2. 删除所有.dpf文件中的^M字符
  3. 将文件路径添加到所有.dpf文件的第一列文件路径为:/cm/vic/digital/orcr/vic_export
  4. .dpf文件目前以制表符分隔,所以我想将它们转换为管道分隔的文件
  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

很难确定你真正在问什么:你的描述和代码并不匹配。尽管如此,情况如何?

#! /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 "%sn" "${files_with_timestamp[@]}"
done

最新更新