Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2545669
  • 博文数量: 308
  • 博客积分: 5547
  • 博客等级: 大校
  • 技术积分: 3782
  • 用 户 组: 普通用户
  • 注册时间: 2009-11-24 09:47
个人简介

hello world.

文章分类

全部博文(308)

分类: LINUX

2016-09-28 10:24:06


点击(此处)折叠或打开

  1. #!/bin/sh

  2. #程序描述:处理数据文件,对文件最后一行没有结束符,追加结束符
  3. #作者: 程晓鹏
  4. #日期: 2016.09.27

  5. #对数据文件,最后一行没有回车换行的内容,追加结束符
  6. #参数1:文件原始路径
  7. #参数2:处理后的文件路径
  8. #参数3:是否按照unix格式进行换行 0:使用默认的行分隔符(速度快);1:unix环境的换行(文件大时,处理效率慢)
  9. function append_end_tag
  10. {
  11.   source_path="$1";
  12.   target_path="$2";
  13.   unix_tag="$3";
  14.   tmp_path="${source_path}.tmp_file"; #临时文件

  15.   cat "$source_path" > $tmp_path;
  16.   end_char=`head -n 1 $source_path | awk '{print substr($0,length($0),length($0)+1)}'`; #取第一行的最后一个字符
  17.   end_value=$(getAsciiValue "${end_char}"); #ascii的值
  18.   
  19.   if [ $end_value -eq 13 ]; then #回车的ascii值为13
  20.     echo "${end_char}" >> $tmp_path; #将第一行最后一个字符,插入到文件尾部;否则最后一行没有换行,则无法读入
  21.   fi;
  22.   cat /dev/null > $target_path; #清空目标路径,为写入文件做准备

  23.   cat $tmp_path | while read line
  24.   do
  25.     if [ "$unix_tag" == "1" ]; then
  26.       last_char=`echo ${line} | awk '{print substr($0,length($0),length($0)+1)}'`; #取出行结束符
  27.       last_value=$(getAsciiValue "${last_char}"); #ascii的值 (数据量大时,处理比较耗时)
  28.       
  29.       if [ $last_value -eq 13 ]; then #windows系统文本数据,回车ascii值为13
  30.         echo ${line} | awk '{print substr($0,0,length($0)-1)}' >> $target_path; #将回车换行过滤掉,变为unix所支持的换行
  31.       else
  32.         echo "$line" >> $target_path; #原始输出
  33.       fi;
  34.     else
  35.       echo "$line" >> $target_path; #原始输出
  36.     fi;
  37.   done;

  38.   rm -rf $tmp_path; #删除临时文件
  39. }

  40. #获取Ascii字符对应的值
  41. #参数1: ascii字符
  42. function getAsciiValue
  43. {
  44.   v_char="$1";
  45.   v_result="-1"; #返回值
  46.   v_line=`echo "${v_char}" | tr -d "\n" | od -An -t dC | tr -d "\n" | awk '{print int($0)}' | wc -l | awk '{print int($0)}'`; #返回的数据行数

  47.   if [ $v_line -gt 0 ]; then
  48.     v_result=`echo "${v_char}" | tr -d "\n" | od -An -t dC | tr -d "\n" | awk '{print int($0)}'`;
  49.   fi;
  50.   
  51.   echo "$v_result";
  52. }


  53. #程序入口
  54. var_parameter_count=$#; #参数个数
  55. var_shell_name=$0; #shell名称
  56. var_unix_tag="0"; #unix换行标志位;0:使用默认的行分隔符(速度快);1:unix环境的换行(文件大时,处理效率慢)

  57. if [ $var_parameter_count -lt 2 ]; then
  58.   echo "error: this shell using 2 parameter。example: ${var_shell_name} url_source_path url_targetpath";
  59. else
  60.   if [ $var_parameter_count -gt 2 -a "$3" == "1" ]; then
  61.     var_unix_tag="1";
  62.   fi;

  63.   append_end_tag "$1" "$2" "$var_unix_tag";
  64. fi;

format_file.rar
阅读(3442) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~