免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 3828 | 回复: 12

[文本处理] 字符串判断大小 [复制链接]

论坛徽章:
0
发表于 2017-07-26 17:08 |显示全部楼层
判断字符串大小,grep 出来的字符串如 01:00:30

判断字符串shell如:
a=$(grep a 1.txt|awk '{print $4}');
b=$(grep a 2.txt|awk '{print $4}');

if [ $(echo $a $b|awk '$1>$2 {print 1} $1==$2{print 0} $1<$2{print 2}') -eq 1 ]

但实际a=01:00:02 b=02:30:10

结果变成了$1>$2,是因为$b 取不到值么?


论坛徽章:
39
辰龙
日期:2013-08-21 15:45:192015亚冠之广州富力
日期:2015-05-12 16:34:52亥猪
日期:2015-03-03 17:22:00申猴
日期:2015-03-03 17:21:37未羊
日期:2014-10-10 13:45:41戌狗
日期:2014-06-17 09:53:29巨蟹座
日期:2014-06-12 23:17:17双鱼座
日期:2014-06-10 12:42:44寅虎
日期:2014-06-09 12:52:172015亚冠之卡尔希纳萨夫
日期:2015-05-24 15:24:35黄金圣斗士
日期:2015-12-02 17:25:0815-16赛季CBA联赛之吉林
日期:2017-06-24 16:43:52
发表于 2017-07-27 08:57 |显示全部楼层
echo "a=$a  b=$b"  看看就知道了

论坛徽章:
0
发表于 2017-07-27 15:33 |显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
145
技术图书徽章
日期:2013-10-01 15:32:13戌狗
日期:2013-10-25 13:31:35金牛座
日期:2013-11-04 16:22:07子鼠
日期:2013-11-18 18:48:57白羊座
日期:2013-11-29 10:09:11狮子座
日期:2013-12-12 09:57:42白羊座
日期:2013-12-24 16:24:46辰龙
日期:2014-01-08 15:26:12技术图书徽章
日期:2014-01-17 13:24:40巳蛇
日期:2014-02-18 14:32:59未羊
日期:2014-02-20 14:12:13白羊座
日期:2014-02-26 12:06:59
发表于 2017-07-27 18:43 |显示全部楼层
回复 3# 本友会机友会摄友会

可怜的孩子......
shell不适合你
编程更不适合你
别再为难你自已了...

>> ...因为傻,因为不符合人类逻辑...

傻孩子 别再编程了

论坛徽章:
0
发表于 2017-07-28 11:59 |显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
307
程序设计版块每周发帖之星
日期:2016-04-08 00:41:33操作系统版块每日发帖之星
日期:2015-09-02 06:20:00每日论坛发贴之星
日期:2015-09-02 06:20:00程序设计版块每日发帖之星
日期:2015-09-04 06:20:00每日论坛发贴之星
日期:2015-09-04 06:20:00每周论坛发贴之星
日期:2015-09-06 22:22:00程序设计版块每日发帖之星
日期:2015-09-09 06:20:00程序设计版块每日发帖之星
日期:2015-09-19 06:20:00程序设计版块每日发帖之星
日期:2015-09-20 06:20:00每日论坛发贴之星
日期:2015-09-20 06:20:00程序设计版块每日发帖之星
日期:2015-09-22 06:20:00程序设计版块每日发帖之星
日期:2015-09-24 06:20:00
发表于 2017-07-28 14:20 |显示全部楼层
本帖最后由 sunzhiguolu 于 2017-07-28 15:36 编辑
  1. function Parse{
  2.     [int] $h, [int] $m, [int] $s = $args[0] -split ":"
  3.     $m += [int] ($s / 60)
  4.     $s = $s % 60
  5.     $h += [int] ($m / 60)
  6.     $m = $m % 60
  7.     return "{0:d2}:{1:d2}:{2:d2}" -f $h, $m, $s
  8. }

  9. @{na = "01:00:02"; nb = "02:30:10"}, @{na = "00:00:65"; nb = "00:01:01"},
  10. @{na = "55:43:11"; nb = "55:42:71"} | foreach {
  11.    $a = Parse $_.na
  12.    $b = Parse $_.nb
  13.     if($a -eq $b){
  14.         $cmp = "=="
  15.     }elseif($a -gt $b){
  16.         $cmp = ">"
  17.     }else{
  18.         $cmp = "<"
  19.     }
  20.     Write-Host $_.na $cmp $_.nb
  21. }
复制代码



  1. function Parse{
  2.     [int] $h, [int] $m, [int] $s = $args[0] -split ":"
  3.     return ($h * 60 + $m) * 60 + $s
  4. }
复制代码

论坛徽章:
145
技术图书徽章
日期:2013-10-01 15:32:13戌狗
日期:2013-10-25 13:31:35金牛座
日期:2013-11-04 16:22:07子鼠
日期:2013-11-18 18:48:57白羊座
日期:2013-11-29 10:09:11狮子座
日期:2013-12-12 09:57:42白羊座
日期:2013-12-24 16:24:46辰龙
日期:2014-01-08 15:26:12技术图书徽章
日期:2014-01-17 13:24:40巳蛇
日期:2014-02-18 14:32:59未羊
日期:2014-02-20 14:12:13白羊座
日期:2014-02-26 12:06:59
发表于 2017-07-28 14:51 |显示全部楼层
本帖最后由 jason680 于 2017-07-28 14:53 编辑

回复 6# sunzhiguolu

看你们写的PS代码 让人头痛...

$ cat FILE
01:00:02 02:30:10
00:00:65 00:01:01
55:43:11 55:42:71

$ awk 'function tm(t,n){n=split(t,a,":");return((a[1]*60+a[2])*60+a[3])}{e="=";if(tm($1)>tm($2))e=">";if(tm($1)<tm($2))e="<";print $1,e,$2}' FILE
01:00:02 < 02:30:10
00:00:65 > 00:01:01
55:43:11 = 55:42:71

评分

参与人数 1信誉积分 +9 收起 理由
sunzhiguolu + 9 涨姿势了,谢谢。

查看全部评分

论坛徽章:
307
程序设计版块每周发帖之星
日期:2016-04-08 00:41:33操作系统版块每日发帖之星
日期:2015-09-02 06:20:00每日论坛发贴之星
日期:2015-09-02 06:20:00程序设计版块每日发帖之星
日期:2015-09-04 06:20:00每日论坛发贴之星
日期:2015-09-04 06:20:00每周论坛发贴之星
日期:2015-09-06 22:22:00程序设计版块每日发帖之星
日期:2015-09-09 06:20:00程序设计版块每日发帖之星
日期:2015-09-19 06:20:00程序设计版块每日发帖之星
日期:2015-09-20 06:20:00每日论坛发贴之星
日期:2015-09-20 06:20:00程序设计版块每日发帖之星
日期:2015-09-22 06:20:00程序设计版块每日发帖之星
日期:2015-09-24 06:20:00
发表于 2017-07-28 15:06 |显示全部楼层
问题已经纠正,谢大神指点。
  1. #!/usr/bin/perl
  2. use strict;
  3. use warnings;

  4. my @aMsg = (">", "==", "<");
  5. while(<DATA>){
  6.         my ($ta, $tb) = map {[split(/:/)]} split;
  7.         my $sa = $ta->[-1] + $ta->[1] * 60 + $ta->[0] * 60 * 60;
  8.         my $sb = $tb->[-1] + $tb->[1] * 60 + $tb->[0] * 60 * 60;
  9.         my $msg = $aMsg[1];
  10.         $msg = $aMsg[0] if($sa > $sb);
  11.         $msg = $aMsg[-1] if($sa < $sb);
  12.         print(join(':', @$ta), " $msg ", join(':', @$tb), "\n");
  13. }

  14. __DATA__
  15. 01:00:02 02:30:10
  16. 00:00:65 00:01:01
  17. 55:43:11 55:42:71
复制代码

论坛徽章:
307
程序设计版块每周发帖之星
日期:2016-04-08 00:41:33操作系统版块每日发帖之星
日期:2015-09-02 06:20:00每日论坛发贴之星
日期:2015-09-02 06:20:00程序设计版块每日发帖之星
日期:2015-09-04 06:20:00每日论坛发贴之星
日期:2015-09-04 06:20:00每周论坛发贴之星
日期:2015-09-06 22:22:00程序设计版块每日发帖之星
日期:2015-09-09 06:20:00程序设计版块每日发帖之星
日期:2015-09-19 06:20:00程序设计版块每日发帖之星
日期:2015-09-20 06:20:00每日论坛发贴之星
日期:2015-09-20 06:20:00程序设计版块每日发帖之星
日期:2015-09-22 06:20:00程序设计版块每日发帖之星
日期:2015-09-24 06:20:00
发表于 2017-07-28 15:25 |显示全部楼层
本帖最后由 sunzhiguolu 于 2017-07-28 15:28 编辑

回复 7# jason680
看你们写的PS代码 让人头痛...

一直感觉学习 PowerShell 不得法,大神能否具体指出问题所在?
纠正问题,治好您老人家的头疼病。。。

论坛徽章:
0
发表于 2017-07-28 16:33 |显示全部楼层
你们写的都好复杂。。
我这个是字符串是时间,小时:分:秒。。我改了下
现在可以了
a=$(grep a 1.txt|awk '{print $4}'|awk -F ":" '{print $1*3600+$2*60+$3}');
b=$(grep a 2.txt|awk '{print $4}'|awk -F ":" '{print $1*3600+$2*60+$3}');
还是这样比较简单点。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP