find筛选问题

sh/bash/dash/ksh/zsh等Shell脚本
回复
liucheng1513
帖子: 62
注册时间: 2010-09-08 18:17

find筛选问题

#1

帖子 liucheng1513 » 2011-03-05 8:35

0010_01_00000091_1100_0_2010_03_07_06_06_58_new.txt
0010_01_00000095_1100_0_2010_03_07_06_06_58_new.txt
0010_01_00000099_1100_0_2010_03_07_06_06_58_new.txt

在/var/apache-tomcat-5.5.20/webapps/bustv/dl_stat/目录下有很多这样的文件,如何用find命令或其他方式筛选第36,37位(06)是09,10,11,12的文件,并把筛选出来的文件的_0_更改成_1_,要具体代码。
上次由 liucheng1513 在 2011-03-05 19:03,总共编辑 3 次。
头像
trigger
帖子: 1604
注册时间: 2006-10-25 18:08

Re: find筛选问题

#2

帖子 trigger » 2011-03-05 9:44

管道给awk进一步筛选
楼主真是一派胡言,真可谓:“两个黄鹂鸣翠柳,不知所云;一行白鹭上青天,不知所止“。本来不想和你辩论,今天气愤不过,和你理论一番。我国宪法写得清清楚楚:“一夜夫妻百日恩,七楼以上才有电梯”。这个想必你知道,既然知道,你就不能断章取义,就算是天气预报,它还有不准的时候呢!!!再者说了,那中国银行也不是你一家开的。人家马拉多纳都结婚了,你还拿着粮票顶什么用呢。真是滑天下之大稽。前些日子,全国人大刚刚开过会,郑重声明:“中国不搞多party制,存栏母猪给补贴”。多好的事呢,楞让你这号人给搅混了。
gzbao9999
帖子: 627
注册时间: 2008-11-08 18:34

Re: find筛选问题

#3

帖子 gzbao9999 » 2011-03-05 17:59

代码: 全选

ls *.txt|while read i;
do 
temp=`echo $i|cut -c 36-37` ;
   if [ $temp -lt 12 ] && [ $temp -gt 9 ] ;then 
      echo $i;
      newname=${i:0:22}1${i:23} ;
      echo $newname;  
      mv $i $newname;
   fi;
done
试试
气血鼓荡,身体发胀,偶飘上头,三时舒畅
liucheng1513
帖子: 62
注册时间: 2010-09-08 18:17

Re: find筛选问题

#4

帖子 liucheng1513 » 2011-03-05 18:10

提示: line 5: [: us: integer expression expected
头像
lilydjwg
论坛版主
帖子: 4258
注册时间: 2009-04-11 23:46
系统: Arch Linux
联系:

Re: find筛选问题

#5

帖子 lilydjwg » 2011-03-05 19:12

[python]
import os
for i in os.listdir():
if i[35:37] in ('09', '10', '11', '12'):
os.rename(i, i.replace('_0_', '_1_'))
[/python]
liucheng1513
帖子: 62
注册时间: 2010-09-08 18:17

Re: find筛选问题

#6

帖子 liucheng1513 » 2011-03-05 19:21

五楼的这个怎么用啊,怎么把目录添加进去啊/var/apache-tomcat-5.5.20/webapps/bustv/dl_stat/
头像
lilydjwg
论坛版主
帖子: 4258
注册时间: 2009-04-11 23:46
系统: Arch Linux
联系:

Re: find筛选问题

#7

帖子 lilydjwg » 2011-03-05 19:30

liucheng1513 写了:五楼的这个怎么用啊,怎么把目录添加进去啊/var/apache-tomcat-5.5.20/webapps/bustv/dl_stat/
你要是不懂 Python 的话就先 cd 过去吧。懂的话把目录名作为 listdir 的参数传过去就可以了
liucheng1513
帖子: 62
注册时间: 2010-09-08 18:17

Re: find筛选问题

#8

帖子 liucheng1513 » 2011-03-05 19:32

cd 过去后怎么用啊
fnan
帖子: 919
注册时间: 2009-07-01 22:04

Re: find筛选问题

#9

帖子 fnan » 2011-03-06 8:33

cd /var/apache-tomcat-5.5.20/webapps/bustv/dl_stat/
for i in $(find . -name '0010_01*new.txt' |awk -F"_" '$9 ~/09|10|11|12/ {print $0}');do fname=$i; mv $fname ${fname/_0_/_1_}; done
bash不如perl精妙,学不到lisp的皮毛,远不够c++强悍,不过可以用。
sk1418
帖子: 229
注册时间: 2007-07-01 17:36
系统: (En):System
来自: (En):address
联系:

Re: find筛选问题

#10

帖子 sk1418 » 2011-03-06 9:12

这行应该可以吧?

代码: 全选

find /var/apache-tomcat-5.5.20/webapps/bustv/dl_stat -name "*.txt" | awk -F'_' '$9~/[06|09|10|11]/ {print $0}'|xargs rename "_0_" "_1_" 
---
regards,

Kent
gzbao9999
帖子: 627
注册时间: 2008-11-08 18:34

Re: find筛选问题

#11

帖子 gzbao9999 » 2011-03-06 10:05

liucheng1513 写了:提示: line 5: [: us: integer expression expected
说明你传过来的结果集合并不全是下面这种格式的
0010_01_00000091_1100_0_2010_03_07_06_06_58_new.txt
0010_01_00000095_1100_0_2010_03_07_06_06_58_new.txt
0010_01_00000099_1100_0_2010_03_07_06_06_58_new.txt


36、37位是字母的时候会提示那个问题
比如下面这个:
0010_01_00000099_1100_0_2010_03_07_ss_06_58_new.txt
过滤下你的结果集吧
气血鼓荡,身体发胀,偶飘上头,三时舒畅
头像
lilydjwg
论坛版主
帖子: 4258
注册时间: 2009-04-11 23:46
系统: Arch Linux
联系:

Re: find筛选问题

#12

帖子 lilydjwg » 2011-03-07 14:25

liucheng1513 写了:cd 过去后怎么用啊
你下载并保存代码,然后

代码: 全选

python3 那个文件
(python2 应该也行)。
fnan
帖子: 919
注册时间: 2009-07-01 22:04

Re: find筛选问题

#13

帖子 fnan » 2011-03-14 6:24

do
temp=`echo $i|cut -c 36-37` ;
if [ $temp -lt 12 ] && [ $temp -gt 9 ] ;then

这句有逻辑错误,09 不是整形,不能这样比较的。
bash不如perl精妙,学不到lisp的皮毛,远不够c++强悍,不过可以用。
回复