一次shell中seq的处理

一次shell中seq的处理

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

一次shell中seq的处理

原始脚本
#! /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位数的时候,就出现问题了:

如下:
[[email protected] ~]# 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

[[email protected] ~]# 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 ...

达到预期的目标了!

分类:默认分类 时间:2012-01-21 人气:2
本文关键词:
分享到:

相关文章

  • bash shell实现并发多进程操作 2012-05-31

    bash shell实现并发多进程操作 前言 目前我掌握的基本语言,php(最为熟悉,项目里代码都是用其实现),bash shell(运维利器),c(acm专用),这里面能实现多线程的貌似只有c,但是我c只是用来学习和实现算法和数据结构,因此工作中我想要模拟多进程并发操作,就只能依靠bash shell脚本了 技能点 shell脚本里实现并发操作,需要用到 for循环 &后台运行符 wait等待所有子进程结束 思路 我们可以通过写一个for循环,控制每次需要批量操作的次数, 然后封装一个

  • Linux Shell 文本处理工具集锦 2012-12-14

    提供的例子和参数都是最常用和最为实用的; 我对shell脚本使用的原则是命令单行书写,尽量不要超过2行; 如果有更为复杂的任务需求,还是考虑python吧; find 文件查找 •查找txt和pdf文件 代码如下: find . ( -name "*.txt" -o -name "*.pdf" ) -print •正则方式查找.txt和pdf 代码如下: find . -regex ".*(.txt|.pdf)$" -iregex: 忽略大小写的正则 •否定参数 查找所有非txt文本 代码如下:

  • C.Shell.Perl基于Tomcat开发CGI程序环境配置 2012-01-15

    基于Tomcat7.0版本配置CGI开发环境,步聚如下: 以我的Tomcat7安装目录为例:TOMCA_HOME = /Users/yangxin/Documents/devToos/java/apache-tomcat-7.0.39 1、打开TOMCA_HOME/conf/web.xml 将CGI的Serlvet配置与URL映射注释打开 cgi org.apache.catalina.servlets.CGIServlet debug 0 executable cgiPathPrefix WE

  • 联通某平台shell导致联通106短信随意发送/或可伪造任意号码发送 2012-01-16

    联通某平台shell导致联通106短信随意发送 目测连接联通核心短信接口,或可伪造任意号码发送 http://www.ums86.com/ 联通的一信通 企业信息服务平台 http://wenku.baidu.com/link?url=UAxsPIr3meNd8QOFLQ-UaoBPrdGbA0X5_7X-oq5QJqq9cyNFdKZGEed4T-fjmp_AABgHGBDfXj1srqkatqCCUzPRA4zjUkhNgfQRW31Mmxu 这里是对企业短信发送接口的详细介绍 访问主站后有

  • Linux Shell参数替换 2012-01-27

    Linux Shell参数替换 Bash中的$符号的作用是参数替换,将参数名替换为参数所代表的值。对于$来说,大括号是可选的,即$A和${A}代表同一个参数。 ${}带冒号的有下面几种表达式: ${parameter:-word} 如果parameter为null或者未设置,整个参数替换表达式值为word ${parameter:=word} 如果parameter为null或者未设置,整个参数替换表达式值为word,并且parameter参数值设置为word ${parameter:?word

  • Tiny Shell使用说明书 2012-02-02

      Tiny Shell是一款轻量级的标准远程Shell工具,可以提供远程执行命令(包括:Rlogin,Telnet,Ssh等)和文件传输功能(上传、下载),支持单字节,完全支持pseudo-Terminal Pairs(pty/tty)等伪终端。   一,前言   随着互联网的发展,使用Unix/Linux系统的越来越多,而入侵一台Unix/Linux系统也不再是什么难事了。通常,在入侵成功之后,都会留一个或几个后门,以便再次进入;对于Unix/Linux系统,后门的种类比较多,初级的有修改“

  • shell一些命令行参数笔记 2012-02-11

    shell一些命令行参数笔记 1、getopts可以编写脚本,使控制多个命令行参数更加容易 如:文件get.sh #! /bin/sh NAME=false AGE=false ODD=false SEX=false while getopts :nao:s: arg do case $arg in n) echo 'name is true';; a) echo 'age is true';; o) echo 'odd is' $OPTARG;; s) echo 'sex is'$OPTARG

  • 免杀shell-weevely分析 2012-02-26

    最近闲的蛋疼,玩了下weevely这个工具,感觉还是蛮强大的,防查杀,连接也是加密的。感兴趣的朋友看正文吧。 0×01 摘要 weevely是一款针对PHP的webshell的自由软件,可用于模拟一个类似于telnet的连接shell,weevely通常用于web程序 的漏洞利用,隐藏后门或者使用类似telnet的方式来代替web 页面式的管理,weevely生成的服务器端php代码是经过了base64编码的,所以可以骗过主流的杀毒软件和IDS,上传服务器端代码后通常可以通 过weevely直接

  • awk调用shell并将变量传递给shell awk与shell之间的变量传递 2012-02-28

    在Shell脚本中调用awk是非常自然和简单,本文我们来看看awk调用shell并将变量传递给shell,awk中使用shell中的变量,awk向shell变量传递值 在Shell脚本中调用awk是非常自然和简单的,如果需要调用shell脚本/命令,则需要使用system()函数,如果需要将变量传递给被调用的shell,则写为 system(“sh my.sh ” $var) 注意第二个引号前有一个空格。 awk调用shell,并将变量传递给shell,看下面的演示,就一下明白了: 代码如下 复

Copyright (C) quwantang.com, All Rights Reserved.

趣玩堂 版权所有 京ICP备15002868号

processed in 0.204 (s). 10 q(s)