LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 919|回复: 6

有个棘手的问题,没有思路

[复制链接]
发表于 2007-7-11 18:18:38 | 显示全部楼层 |阅读模式
/2007-07-06/version.txt
/2007-07-07/version.txt
/2007-07-09/version.txt
/2007-07-10/version.txt
/2007-07-11/version.txt
/version.txt
我要把每个目录的version.txt 按照时间顺序合并到总的/version.txt中间,同时需要把filenema和path同时写到每个version。txt后面,作为区分各个文件之间的内容
发表于 2007-7-11 18:58:52 | 显示全部楼层
  1. #! /bin/sh
  2. for i in 06 07 09 10 11 ;do
  3.   if [ -f "/2007-07-$i/version.txt" ] ; then
  4.      cat "/2007-07-$i/version.txt" >>/version.txt
  5.      echo "/2007-07-$i/version.txt" >>/version.txt
  6.   fi
  7. done
复制代码
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-7-12 10:13:28 | 显示全部楼层
这个有个不好的地方就是,现在目录还在不断的增加,每天都会有一个新的目录增加,那个
for i in 06 07 09 10 11 ;这句话就不太通用了
能不能用个更通用的办法啊?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-7-12 10:19:33 | 显示全部楼层
我自己改动了下
#! /bin/sh
file=$(find ./ -mindepth 2 -name version.txt)
for i in $file;do
  if [ -f "$i" ] ; then
     cat "$i" >>./version.txt
     echo "$i" >>./version.txt
  fi
done
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-7-12 10:28:07 | 显示全部楼层
在修改一下,原来的会一直接到后面,现在把原先的version.txt先删除,在>>就可以了
#! /bin/sh
if [ -f ./version.txt ]; then
        rm ./version.txt
fi
file=$(find ./ -mindepth 2 -name version.txt)
for i in $file;do
if [ -f "$i" ] ; then
cat "$i" >>./version.txt
echo "$i" >>./version.txt
fi
done
回复 支持 反对

使用道具 举报

发表于 2007-7-12 10:36:07 | 显示全部楼层
嗯,这样就更完美了,学习了
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-7-12 11:40:01 | 显示全部楼层
在改进一步,用awk格式化输出一下,就更容易看看了
#! /bin/sh
file=$(find ./ -mindepth 2 -name version.txt)
if [ -f ./version.txt ]; then
        rm ./version.txt
fi
for i in $file;do
  if [ -f "$i" ] ; then
     awk -F: 'BEGIN{print "Time\t\tContext"}{print FILENAME$1"\t\t"$2}\
                 END{print FILENAME}' "$i" >> ./version.txt
  fi
done
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表