亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費注冊 查看新帖 |

Chinaunix

  平臺 論壇 博客 文庫
12下一頁
最近訪問板塊 發(fā)新帖
查看: 3387 | 回復(fù): 14
打印 上一主題 下一主題

[文本處理] awk中的c<=b和c-b<=0的區(qū)別 [復(fù)制鏈接]

論壇徽章:
1
丑牛
日期:2014-02-14 17:07:04
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報告]
發(fā)表于 2014-02-12 10:21 |只看該作者 |倒序瀏覽
本帖最后由 ace_fei 于 2014-02-12 11:38 編輯

原始文本
3076931 3076733 AA
3076738 3076739 BB
3076130 3076131 CC
3071127 3071127 CC
需要得到文本
3076931 3076731 AA
3076732 3076732 AA
3076933 3076733 AA
3076738 3076738 BB
3076739 3076739 BB
3076130 3076130 CC
3076131 3076131 CC
3071127 3071127 CC

我現(xiàn)在用awk來處理,可以得到結(jié)果。
$awk '{a=substr($1,7,1);b=substr($2,7,1);for(c=a;c-b<=0;c++){x=substr($1,1,6)c;y=substr($2,1,6)c;print x,y,$3}}' 1.txt
3076931 3076731 AA
3076932 3076732 AA
3076933 3076733 AA
3076738 3076738 BB
3076739 3076739 BB
3076130 3076130 CC
3076131 3076131 CC
3071127 3071127 CC

但是我發(fā)現(xiàn)我要是把for循環(huán)中的 c-b<=0,改為c<=b,結(jié)果就不同了,請問大家知道是什么原因嗎?
$awk '{a=substr($1,7,1);b=substr($2,7,1);for(c=a;c<=b;c++){x=substr($1,1,6)c;y=substr($2,1,6)c;print x,y,$3}}' 1.txt
3076931 3076731 AA
3076932 3076732 AA
3076933 3076733 AA
3076738 3076738 BB
3076739 3076739 BB
30767310 30767310 BB
30767311 30767311 BB
... ...
30767389 30767389 BB
3076130 3076130 CC
3076131 3076131 CC
3071127 3071127 CC

如果是比較ascii碼,為什么就BB那行數(shù)據(jù)有異常,是'8'跟'9'對應(yīng)的ascii碼做比較嗎?

進(jìn)展:
我修改了一下原始文本BB那列的數(shù)據(jù),發(fā)現(xiàn)只有當(dāng)末位數(shù)是9的時候(即b=9),才會出異常,判斷c<=b時,會自動變成c<=90。

論壇徽章:
780
金牛座
日期:2014-02-26 17:49:58水瓶座
日期:2014-02-26 18:10:15白羊座
日期:2014-04-15 19:29:52寅虎
日期:2014-04-17 19:43:21酉雞
日期:2014-04-19 21:24:10子鼠
日期:2014-04-22 13:55:24卯兔
日期:2014-04-22 14:20:58亥豬
日期:2014-04-22 16:13:09獅子座
日期:2014-05-05 22:31:17摩羯座
日期:2014-05-06 10:32:53處女座
日期:2014-05-12 09:23:11子鼠
日期:2014-05-21 18:21:27
2 [報告]
發(fā)表于 2014-02-12 10:31 |只看該作者
回復(fù) 1# ace_fei
猜一個,b,c都是字符串,
c-b比的是數(shù)值大小, c<=b字符串比較。


   

論壇徽章:
33
ChinaUnix元老
日期:2015-02-02 08:55:39CU十四周年紀(jì)念徽章
日期:2019-08-20 08:30:3720周年集字徽章-周	
日期:2020-10-28 14:13:3020周年集字徽章-20	
日期:2020-10-28 14:04:3019周年集字徽章-CU
日期:2019-09-08 23:26:2519周年集字徽章-19
日期:2019-08-27 13:31:262016科比退役紀(jì)念章
日期:2022-04-24 14:33:24
3 [報告]
發(fā)表于 2014-02-12 10:33 |只看該作者
c<=b 是做的ASCII比較

論壇徽章:
145
技術(shù)圖書徽章
日期: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技術(shù)圖書徽章
日期:2014-01-17 13:24:40巳蛇
日期:2014-02-18 14:32:59未羊
日期:2014-02-20 14:12:13白羊座
日期:2014-02-26 12:06:59
4 [報告]
發(fā)表于 2014-02-12 10:41 |只看該作者
回復(fù) 1# ace_fei

c <= b
  didn't change b to be a number and it will compare with string

there are many way can work fine
1. c-b <= 0 , your solution
2. c <= b+0
3. c <= b*1
4. c <= +b
5. c <= int(b)

論壇徽章:
1
丑牛
日期:2014-02-14 17:07:04
5 [報告]
發(fā)表于 2014-02-12 10:51 |只看該作者
回復(fù) 4# jason680
謝謝大家,看來以后記得用a-b<=0來做數(shù)字比較就沒錯了。

   

論壇徽章:
1
丑牛
日期:2014-02-14 17:07:04
6 [報告]
發(fā)表于 2014-02-12 10:53 |只看該作者
回復(fù) 3# Shell_HAT
比如上面的例子,是拿“8”跟“9”的ascii來比較?

   

論壇徽章:
32
處女座
日期:2013-11-20 23:41:20雙子座
日期:2014-06-11 17:20:43戌狗
日期:2014-06-16 11:05:00處女座
日期:2014-07-22 17:30:47獅子座
日期:2014-07-28 15:38:17金牛座
日期:2014-08-05 16:34:01亥豬
日期:2014-08-18 13:34:25白羊座
日期:2014-09-02 15:03:55金牛座
日期:2014-11-10 10:23:58處女座
日期:2014-12-02 09:17:52程序設(shè)計版塊每日發(fā)帖之星
日期:2015-06-16 22:20:002015亞冠之塔什干火車頭
日期:2015-06-20 23:28:22
7 [報告]
發(fā)表于 2014-02-12 11:10 |只看該作者
如果用c<=b的話,awk默認(rèn)會以ACSII碼的順序來比較,而不是以數(shù)值的大小比較。

論壇徽章:
1
丑牛
日期:2014-02-14 17:07:04
8 [報告]
發(fā)表于 2014-02-12 11:15 |只看該作者
本帖最后由 ace_fei 于 2014-02-12 11:16 編輯

回復(fù) 7# yestreenstars
比如上面的例子,取BB那行的數(shù)據(jù),c<=b是“8”跟“9”的ascii比較嗎,那也不至于比到89吧,89對應(yīng)的是Z。

   

論壇徽章:
33
ChinaUnix元老
日期:2015-02-02 08:55:39CU十四周年紀(jì)念徽章
日期:2019-08-20 08:30:3720周年集字徽章-周	
日期:2020-10-28 14:13:3020周年集字徽章-20	
日期:2020-10-28 14:04:3019周年集字徽章-CU
日期:2019-09-08 23:26:2519周年集字徽章-19
日期:2019-08-27 13:31:262016科比退役紀(jì)念章
日期:2022-04-24 14:33:24
9 [報告]
發(fā)表于 2014-02-12 11:21 |只看該作者
回復(fù) 8# ace_fei


    不是把89看成一個整體,而是先看這個字符串的第一個字符8的ASCII

論壇徽章:
32
處女座
日期:2013-11-20 23:41:20雙子座
日期:2014-06-11 17:20:43戌狗
日期:2014-06-16 11:05:00處女座
日期:2014-07-22 17:30:47獅子座
日期:2014-07-28 15:38:17金牛座
日期:2014-08-05 16:34:01亥豬
日期:2014-08-18 13:34:25白羊座
日期:2014-09-02 15:03:55金牛座
日期:2014-11-10 10:23:58處女座
日期:2014-12-02 09:17:52程序設(shè)計版塊每日發(fā)帖之星
日期:2015-06-16 22:20:002015亞冠之塔什干火車頭
日期:2015-06-20 23:28:22
10 [報告]
發(fā)表于 2014-02-12 12:13 |只看該作者
回復(fù) 8# ace_fei

你是用substr來截取數(shù)字的,得到的是字符串,而不是數(shù)字,所以如果用c<=b的方式比較的話是這樣的:
1.c=a="8",b="9",c<=b為真,c++,c=9;
2.9>="9"為真,c++,c=10;
3.10>="9"為真,c++,c=11;
……
直到c=90時,90>="9"才為假。

這么說,你應(yīng)該能理解吧?
   
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報專區(qū)
中國互聯(lián)網(wǎng)協(xié)會會員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP