免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2201 | 回复: 9
打印 上一主题 下一主题

求问case或if的条件筛选 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-03-09 04:55 |只看该作者 |倒序浏览
求教各位大师,我的name文件夹中存放了很以下格式的文件
1,张三-file_a.txt
1,张三-file_b.txt
2,李四-file_a.txt
2,李四-file_b.txt
3,王五-file_a.txt
4-file_a.txt
4-file_b1.txt
5,刘七-file_a2.txt
5,刘七-file_b1.txt
....
36-file_a.txt
36-file_b.txt
文件名称格式为:ID,人名-file_a或b或a*或b*.txt
ID:必有
,人名:有些人有,有些人没有
-file_:必有
a/b/a*/b*:有些人有a和b;有些人只有a;有些人只有b;有些人只有a1和b1
.txt:必有

目的:
找到有a和b的ID,什么都不做
找到只有a的ID,为此ID创建一个名称符合a文档的空文档b
找到只有a的ID,为此ID创建一个名称符合a文档的空文档b
找到ab都没有的ID,为此ID创建一个名称符合a*或b*的空文档ab,此中*代表数字

论坛徽章:
0
2 [报告]
发表于 2012-03-09 05:53 |只看该作者
没人给个意见嘛?

论坛徽章:
2
射手座
日期:2014-10-10 15:59:4715-16赛季CBA联赛之上海
日期:2016-03-03 10:27:14
3 [报告]
发表于 2012-03-09 08:44 |只看该作者
回复 2# shrimpj


    用gawk 4.0.0的switch试试:
http://www.gnu.org/software/gawk ... itch-Statement.html

论坛徽章:
0
4 [报告]
发表于 2012-03-09 09:09 |只看该作者
回复 3# yinyuemi

好像我不能用gawk4.0吧,我写了一下switch,它没有变色,应该不是特殊字符吧???其实我就是想知道,如果我设置一个变量A,然后把找到的关于每个ID配对的结果付给A,于是如果我echo $A,就会得到以下结果:

1,张三-file_a.txt 1,张三-file_b.txt
2,李四-file_a.txt 2,李四-file_b.txt
3,王五-file_a.txt
4-file_a.txt 4-file_b1.txt  
5,刘七-file_a2.txt 5,刘七-file_b1.txt
36-file_a.txt 36-file_b.txt

然后我再case中设置条件
case $A in
"$ID*-file_a.txt $ID*-file_b.txt") echo correct ;;
"$ID*-file_a.txt") touch "$ID*-file_b.txt" ;;
"$ID*-file_b.txt") touch "$ID*-file_a.txt" ;;
*) touch "$ID*-file_a.txt" touch "$ID*-file_b.txt" ;;

但是我这样写遇到问题,首先通配符*识别不出来,而且第一个条件的空格不能识别并加以匹配,请问我该如何修改???

论坛徽章:
2
射手座
日期:2014-10-10 15:59:4715-16赛季CBA联赛之上海
日期:2016-03-03 10:27:14
5 [报告]
发表于 2012-03-09 09:26 |只看该作者
本帖最后由 yinyuemi 于 2012-03-09 09:26 编辑

回复 4# shrimpj

没测试~
  1. for file in *.txt
  2. do
  3.    id=${file%,*};
  4.    f=${file%_*};
  5.    if [ -f ${id}*a.txt ] && [ -f ${id}*b.txt ]
  6.    then
  7.       echo "correct";
  8.    else
  9.       if  [ ! -f ${id}*b.txt ]
  10.       then
  11.          touch ${f}b.txt
  12.       elif [ ! -f ${id}*a.txt ]
  13.       then
  14.          touch ${f}a.txt
  15.       else
  16.          touch ${f}a.txt ${f}b.txt
  17.       fi
  18.    fi
  19. done
复制代码

论坛徽章:
0
6 [报告]
发表于 2012-03-09 09:51 |只看该作者
回复 5# yinyuemi


    条件2和3找不到?为什么?

论坛徽章:
2
射手座
日期:2014-10-10 15:59:4715-16赛季CBA联赛之上海
日期:2016-03-03 10:27:14
7 [报告]
发表于 2012-03-09 09:55 |只看该作者
本帖最后由 yinyuemi 于 2012-03-09 09:57 编辑

回复 6# shrimpj

你echo下 $id 和 $f,看那个适合做判断条件,修改下脚本吧,
    改成这样试试:

  1. ...
  2.       if  [ ! -f ${f}b.txt ]
  3.       then
  4.          touch ${f}b.txt

  5.       elif [ ! -f ${f}a.txt ]
  6.       then
  7.          touch ${f}a.txt
  8. ...
复制代码

论坛徽章:
0
8 [报告]
发表于 2012-03-09 10:02 |只看该作者
回复 7# yinyuemi


    这里的 -f是什么意思啊?不好意思,能指教一下嘛?

论坛徽章:
2
射手座
日期:2014-10-10 15:59:4715-16赛季CBA联赛之上海
日期:2016-03-03 10:27:14
9 [报告]
发表于 2012-03-09 11:03 |只看该作者

论坛徽章:
0
10 [报告]
发表于 2012-03-09 23:26 |只看该作者
回复 9# yinyuemi


收到,谢谢,我还有一个问题,是思路的问题,希望你可以指点:
以上我说的文件名,其实最理想是每一个参加者都应该有一个a文件,一个b文件,但是建立文件之初,有些人因为a文件出错然后就建立这个人的a1文件,如果a1再出错,就建立a2以此类推,我的目的就是找到a的最后一个完整文件来替换a。我的思路是,判断有没有a和b文件,有就correct,对于没有的创建,然后替换。请问有别的思路吗?
有人建议我打开每个a*文件,然后看哪个是完整的,保留其与删掉,最后改名,我想知道那种比较好,你觉得?谢谢
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP