一次shell中seq的处理

背景:用要shell 提取 文件中内容,文件名是用序列号如下生成,文件差不多有将近400多w个  如下:
  www.ahlinux.com

原始脚本
#! /bin/sh
#str1=""

#filecount=`ls -l /root/gjj | wc -l | awk '{print $1}'`
#echo $filecount

for n in `seq  $1 $2`
do
filename="/windows_gjj/"${n}".txt"
echo $filename

dos2unix $filename
sed -i '1,76d' $filename
sed -i '41,$d' $filename
sed -i 's/<.*">//g' $filename
sed -i 's/<.*>//g' $filename
sed -i 's/^[[:space:]]*//g' $filename
sed -i '/^$/d' $filename
#sed -i 's/;//g' $filename

#cat $filename >> /tmp/all_gjj.log

flag=`grep "&nbsp" $filename | wc -l | awk '{print $1}'`

if [ $flag -ne 10 ]; then
 cat $filename >> /tmp/all_gjj.log
 echo "********************************************************************************************" >> /tmp/all_gjj.log
 LCOUNT=`wc -l $filename | awk '{print $1}'`
 str1=""
 for i in `seq 1 10`
 do
 sed -i '1d' $filename
 str=`head -n 1 $filename`
 echo $str >> /tmp.log
 str1=${str1}${str}"|"
 echo $str1
 sed -i '1d' $filename
 done

echo $str1 >> /root/gjj.txt
fi

done

脚本中$1,$2 代表起始的序列号。
一开始的时候,用这个脚本来提取文件内容是正常的,但当文件名上7位数的时候,就出现问题了:

如下:
[root@ALL ~]# sh tiqu.sh 2908637 2908640
/windows_gjj/2.90864e+06.txt
dos2unix: converting file /windows_gjj/2.90864e+06.txt to UNIX format ...
dos2unix: problems converting file /windows_gjj/2.90864e+06.txt
sed:无法读取 /windows_gjj/2.90864e+06.txt:没有那个文件或目录
sed:无法读取 /windows_gjj/2.90864e+06.txt:没有那个文件或目录
sed:无法读取 /windows_gjj/2.90864e+06.txt:没有那个文件或目录
sed:无法读取 /windows_gjj/2.90864e+06.txt:没有那个文件或目录
sed:无法读取 /windows_gjj/2.90864e+06.txt:没有那个文件或目录
sed:无法读取 /windows_gjj/2.90864e+06.txt:没有那个文件或目录
grep: /windows_gjj/2.90864e+06.txt: 没有那个文件或目录
cat: /windows_gjj/2.90864e+06.txt: 没有那个文件或目录
wc: /windows_gjj/2.90864e+06.txt: 没有那个文件或目录
sed:无法读取 /windows_gjj/2.90864e+06.txt:没有那个文件或目录
head: 无法打开 “/windows_gjj/2.90864e+06.txt” 读取数据: 没有那个文件或目录
|
sed:无法读取 /windows_gjj/2.90864e+06.txt:没有那个文件或目录
sed:无法读取 /windows_gjj/2.90864e+06.txt:没有那个文件或目录
head: 无法打开 “/windows_gjj/2.90864e+06.txt” 读取数据: 没有那个文件或目录
||
sed:无法读取 /windows_gjj/2.90864e+06.txt:没有那个文件或目录
sed:无法读取 /windows_gjj/2.90864e+06.txt:没有那个文件或目录
head: 无法打开 “/windows_gjj/2.90864e+06.txt” 读取数据: 没有那个文件或目录

分析:出现这种问题主要是 shell 把7位数字用指数的形式在表示了,从而造成了找不到对应的文件

解决方法:为了能使 7位数仍然以数字的形式出现,试了 seq 中的-f ,-w 之类的选项都没达到预期的效果,最后采用了折中的方法,最高位用字符代替,后6为用seq 生成,用参数-w 保持位数的宽度一致,修该的脚本如下:
#! /bin/sh
#str1=""

#filecount=`ls -l /root/gjj | wc -l | awk '{print $1}'`
#echo $filecount

for n in `seq -w $1 $2`
do
n="2"${n}
filename="/windows_gjj/"${n}".txt"
echo $filename

dos2unix $filename
sed -i '1,76d' $filename
sed -i '41,$d' $filename
sed -i 's/<.*">//g' $filename
sed -i 's/<.*>//g' $filename
sed -i 's/^[[:space:]]*//g' $filename
sed -i '/^$/d' $filename
#sed -i 's/;//g' $filename

#cat $filename >> /tmp/all_gjj.log

flag=`grep "&nbsp" $filename | wc -l | awk '{print $1}'`

if [ $flag -ne 10 ]; then
 cat $filename >> /tmp/all_gjj.log
 echo "********************************************************************************************" >> /tmp/all_gjj.log
 LCOUNT=`wc -l $filename | awk '{print $1}'`
 str1=""
 for i in `seq 1 10`
 do
 sed -i '1d' $filename
 str=`head -n 1 $filename`
 echo $str >> /tmp.log
 str1=${str1}${str}"|"
 echo $str1
 sed -i '1d' $filename
 done

echo $str1 >> /root/gjj.txt
fi

done

[root@ALL ~]# sh tiqu.sh 908636 908640
/windows_gjj/2908636.txt
dos2unix: converting file /windows_gjj/2908636.txt to UNIX format …
|
/windows_gjj/2908637.txt
dos2unix: converting file /windows_gjj/2908637.txt to UNIX format ...

达到预期的目标了!

一次shell中seq的处理的更多相关文章

  1. shell中的set、seq、eval、exec、&&和||

    一.set 查看set 帮助: bash -c "help set" 选项: -e:任何命令执行失败(非0 status)直接退出 -x: 打印执行过程的命令行.参数 +e:命令执 ...

  2. shell中的循环

    shell中的循环 for循环 类似于C语言的步长控制 例如: ;i<=;i++)); ); done 将1到10,依次乘以4,然后打印出来. 这里顺便提一下,shell里面表达式的计算,可以有 ...

  3. shell中for循环总结

    关于shell中的for循环用法很多,一直想总结一下,今天网上看到上一篇关于for循环用法的总结,感觉很全面,所以就转过来研究研究,嘿嘿... 1. for((i=1;i<=10;i++));d ...

  4. shell中的函数、数组、报警系统脚本

    1.shell中的函数 函数就是把一段代码整理到了一个小单元中,并给这个小单元起一个名字,当用到这段代码时直接调用这 个小单元的名字即可.格式: function f_name() {commond} ...

  5. Shell中的数组及其相关操作

    http://blog.csdn.net/jerry_1126/article/details/52027539 Shell中数据类型不多,比如说字符串,数字类型,数组.数组是其中比较重要的一种,其重 ...

  6. shell中的(),{}几种语法用法

    转自:https://www.cnblogs.com/HKUI/p/6423918.html 查看脚本语法是否有错误:bash -n modify_suffix.sh跟踪执行sh -x modify_ ...

  7. shell 中的()【】{}(())

    本文转自:https://blog.csdn.net/taiyang1987912/article/details/39551385 shell中各种括号的作用().(()).[].[[]].{} 一 ...

  8. centos shell脚本编程2 if 判断 case判断 shell脚本中的循环 for while shell中的函数 break continue test 命令 第三十六节课

    centos  shell脚本编程2 if 判断  case判断   shell脚本中的循环  for   while   shell中的函数  break  continue  test 命令   ...

  9. centos shell脚本编程1 正则 shell脚本结构 read命令 date命令的用法 shell中的逻辑判断 if 判断文件、目录属性 shell数组简单用法 $( ) 和${ } 和$(( )) 与 sh -n sh -x sh -v 第三十五节课

    centos   shell脚本编程1 正则  shell脚本结构  read命令  date命令的用法  shell中的逻辑判断  if 判断文件.目录属性  shell数组简单用法 $( ) 和$ ...

随机推荐

  1. 在Mac中安装python,配置python环境

    参考链接:http://blog.justbilt.com/2014/07/02/setup_python_on_mac/ 其实跟windows差不多,就是在python官网下载特定版本的python ...

  2. Sentry的授权模型

    首先在jdbc中指定的hive用户是一个linux的用户(必须和一个同名linux用户一一对应):这个用户如果是管理员用户,那么可以进行管理工作:比如创建.删除角色,查看角色和用户绑定情况等等:如果不 ...

  3. SQL2005 如何在没有日志文件的情况下如何恢复MDF数据库文件?

    第一步:先建立一个同名数据库,停止SQL SERVER2005,将没有日志的的.mdf数据库文件覆盖刚新建的.mdf数据库文件,重新启动数据库. 第二步:在查询分析器中运行如下代码(将数据库名修改为您 ...

  4. Linux:远程连接 SSH

    一.认识 SSH 定义 SSH(Secure shell):安全外壳协议:是建立在应用层基础上的安全协议: 通过 SSH 进行服务端连接,不容易被窃取信息: 连接服务器 ssh 服务器名 + @ + ...

  5. oracle查询题目2道

    1.列出与“SCOTT”从事相同工作的所有员工. ①先查询SCOTT从事的是什么工作 select job from emp where name like='SCOTT'; ②select enam ...

  6. java mutilThread

    可以参考https://www.cnblogs.com/wxd0108/p/5479442.html 这里补充一下我理解多线程这部分的一些要点. 1.首先是java的monitor概念:https:/ ...

  7. 软件部需求,内容采集,显示内容图文列表,MongoDB数据导入导出JSON

    全局变量 由于多个html页面,需要引用同一个变量.这个时候,需要定义一个全局变量!如何定义呢? 默认包含了mui的html文件都导入mui.js文件.那么将变量写在mui.js中,就可以实现所有页面 ...

  8. DRF之REST规范介绍及View请求流程分析

    编程是数据结构和算法的结合,而在Web类型的App中,我们对于数据的操作请求是通过url来承载的,本文详细介绍了REST规范和CBV请求流程. 编程是数据结构和算法的结合,小程序如简单的计算器,我们输 ...

  9. MongoDB在Windows下的环境配置和使用

    总是觉得配置环境是一个超级麻烦的事情啊,而且网上说的又比较乱,配置完后又没有说怎么开始运行,在哪输入增删改查语句,像突然断层一样.所以就在这里详细说说. 一:下载安装 1.去官网的下载页面 2.下载完 ...

  10. c# 通过dllimport 调用c 动态链接库

    https://blog.csdn.net/zhunju0089/article/details/80906501 这篇文件很详细 讲述了如何创建c 动态链接库项目 有一些注意的地方 不做介绍 下面是 ...