有效解析大量文件

时间:2015-10-28 19:09:37

标签: bash parsing parallel-processing gnu

我需要一些帮助,试图找到一种有效的方法来解析大量小stdout文件的文件路径,并从中创建.csv文件。

示例:find $ PWD -name stdout

  

/根/尺寸/ 6 /色/红色/标准输出

     

/根/大小/ 3 /色/绿色/标准输出

运行此shell脚本将创建

  

6-red.csv

     

3-green.csv

此循环正在处理数千个文件,我正在尝试确保这是正确的解决方案。

任何方向都会非常有帮助。谢谢!

dirfiles=($(find $PWD -name stdout))
for outfile in "${dirfiles[@]}"
do
   thisResult=$( cat $outfile )
   IFS='/' read -a params <<< "$outfile"

   for index in "${!params[@]}"
   do
      param=${params[index]}

      if [ "$param" = "size" ]; then
        size=${params[index+1]}
      fi

      if [ "$param" = "color"]; then
        color=${params[index+1]}
      fi

   done

echo $thisResult 1>>outputCSV/${size}-{color}.csv
done

1 个答案:

答案 0 :(得分:0)

使用perlrename(prename / pren / rename):

# Allow ** to match dirs
shopt -s globstar
rename 's:size/::;s:color/::;s:/:-:g;s:-stdout:.csv:' **/stdout

或者如果你想要一份副本:

find | grep stdout | parallel cp {} '{= s:[.]/::; s:size/::; s:color/::; s:/:-:g; s:-stdout:.csv: =}'