点击(此处)折叠或打开
-
#!/bin/sh
-
-
#程序描述:处理数据文件,对文件最后一行没有结束符,追加结束符
-
#作者: 程晓鹏
-
#日期: 2016.09.27
-
-
#对数据文件,最后一行没有回车换行的内容,追加结束符
-
#参数1:文件原始路径
-
#参数2:处理后的文件路径
-
#参数3:是否按照unix格式进行换行 0:使用默认的行分隔符(速度快);1:unix环境的换行(文件大时,处理效率慢)
-
function append_end_tag
-
{
-
source_path="$1";
-
target_path="$2";
-
unix_tag="$3";
-
tmp_path="${source_path}.tmp_file"; #临时文件
-
-
cat "$source_path" > $tmp_path;
-
end_char=`head -n 1 $source_path | awk '{print substr($0,length($0),length($0)+1)}'`; #取第一行的最后一个字符
-
end_value=$(getAsciiValue "${end_char}"); #ascii的值
-
-
if [ $end_value -eq 13 ]; then #回车的ascii值为13
-
echo "${end_char}" >> $tmp_path; #将第一行最后一个字符,插入到文件尾部;否则最后一行没有换行,则无法读入
-
fi;
-
cat /dev/null > $target_path; #清空目标路径,为写入文件做准备
-
-
cat $tmp_path | while read line
-
do
-
if [ "$unix_tag" == "1" ]; then
-
last_char=`echo ${line} | awk '{print substr($0,length($0),length($0)+1)}'`; #取出行结束符
-
last_value=$(getAsciiValue "${last_char}"); #ascii的值 (数据量大时,处理比较耗时)
-
-
if [ $last_value -eq 13 ]; then #windows系统文本数据,回车ascii值为13
-
echo ${line} | awk '{print substr($0,0,length($0)-1)}' >> $target_path; #将回车换行过滤掉,变为unix所支持的换行
-
else
-
echo "$line" >> $target_path; #原始输出
-
fi;
-
else
-
echo "$line" >> $target_path; #原始输出
-
fi;
-
done;
-
-
rm -rf $tmp_path; #删除临时文件
-
}
-
-
#获取Ascii字符对应的值
-
#参数1: ascii字符
-
function getAsciiValue
-
{
-
v_char="$1";
-
v_result="-1"; #返回值
-
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)}'`; #返回的数据行数
-
-
if [ $v_line -gt 0 ]; then
-
v_result=`echo "${v_char}" | tr -d "\n" | od -An -t dC | tr -d "\n" | awk '{print int($0)}'`;
-
fi;
-
-
echo "$v_result";
-
}
-
-
-
#程序入口
-
var_parameter_count=$#; #参数个数
-
var_shell_name=$0; #shell名称
-
var_unix_tag="0"; #unix换行标志位;0:使用默认的行分隔符(速度快);1:unix环境的换行(文件大时,处理效率慢)
-
-
if [ $var_parameter_count -lt 2 ]; then
-
echo "error: this shell using 2 parameter。example: ${var_shell_name} url_source_path url_targetpath";
-
else
-
if [ $var_parameter_count -gt 2 -a "$3" == "1" ]; then
-
var_unix_tag="1";
-
fi;
-
-
append_end_tag "$1" "$2" "$var_unix_tag";
- fi;
format_file.rar