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

  免費(fèi)注冊(cè) 查看新帖 |

Chinaunix

  平臺(tái) 論壇 博客 文庫(kù)
12下一頁(yè)
最近訪問(wèn)板塊 發(fā)新帖
查看: 2785 | 回復(fù): 13
打印 上一主題 下一主題

[文本處理] 菜鳥(niǎo)求助:awk變量的問(wèn)題 [復(fù)制鏈接]

論壇徽章:
1
白銀圣斗士
日期:2015-11-23 10:45:24
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報(bào)告]
發(fā)表于 2015-09-15 10:18 |只看該作者 |倒序?yàn)g覽
[ 本帖最后由 helloclei 于 2015-09-15 10:31 編輯 ]

正在看《awk與sed第三版》的電子版,第二章最后有一個(gè)關(guān)于州排序的問(wèn)題,如下:
[backcolor=Yellow][root@localhost shell]# cat list
John Daggett, 341 King Road, Plymouth MA
Alice Ford, 22 East Broadway, Richmond VA
Orville Thomas, 11345 Oak Bridge Road, Tulsa OK
Terry Kalkas, 402 Lans Road, Beaver Falls PA
Eric Adams, 20 Post Road, Sudbury MA
Hubert Sims, 328A Brook Road, Roanoke VA
Amy Wilde, 334 Bayshore Pkwy, Mountain View CA
Sal Carpenter, 73 6th Street, Boston MA[/backcolor]
nameState腳本內(nèi)容如下:
[backcolor=Yellow][root@localhost shell]# cat nameState
s/MA/, Masschusetts/
s/VA/, Virginia/
s/OK/, Oklahoma/
s/PA/, Pennsylvania/
s/CA/, California/[/backcolor]

byState內(nèi)容如下:
[backcolor=Yellow][root@localhost shell]# cat byState
#!/bin/bash
awk -F, '{
print $4", "$0
}' $*|
sort|
awk -F, '
$1 == LastState {
print "\t" $2
}
$1 != LastState {
LastState = $1
print $1
print "\t" $2
}'[/backcolor]

執(zhí)行的結(jié)果如下:
[backcolor=Yellow][root@localhost shell]# sed -f nameState list| bash byState
California
         Amy Wilde
Masschusetts
         Eric Adams
         John Daggett
         Sal Carpenter
Oklahoma
         Orville Thomas
Pennsylvania
         Terry Kalkas
Virginia
         Alice Ford
         Hubert Sims[/backcolor]

問(wèn)題:
請(qǐng)問(wèn) $1 == LastState  這個(gè)判斷是怎么定義的?書(shū)里說(shuō)LastState是指上一個(gè)記錄的州名,但是前面沒(méi)有定義過(guò)這個(gè)變量,awk程序怎么會(huì)知道它就是上一條記錄的州名呢?

論壇徽章:
8
摩羯座
日期:2014-11-26 18:59:452015亞冠之浦和紅鉆
日期:2015-06-23 19:10:532015亞冠之西悉尼流浪者
日期:2015-08-21 08:40:5815-16賽季CBA聯(lián)賽之山東
日期:2016-01-31 18:25:0515-16賽季CBA聯(lián)賽之四川
日期:2016-02-16 16:08:30程序設(shè)計(jì)版塊每日發(fā)帖之星
日期:2016-06-29 06:20:002017金雞報(bào)曉
日期:2017-01-10 15:19:5615-16賽季CBA聯(lián)賽之佛山
日期:2017-02-27 20:41:19
2 [報(bào)告]
發(fā)表于 2015-09-15 10:31 |只看該作者
親自測(cè)試下吧

論壇徽章:
1
白銀圣斗士
日期:2015-11-23 10:45:24
3 [報(bào)告]
發(fā)表于 2015-09-15 10:33 |只看該作者
回復(fù) 2# waker

已經(jīng)測(cè)試過(guò)了,結(jié)果跟書(shū)里的也是一樣的,不過(guò)就是有點(diǎn)不明白這個(gè) LastState  變量之前沒(méi)有定義過(guò),awk怎么會(huì)知道就是上條記錄的州名?
   

論壇徽章:
8
摩羯座
日期:2014-11-26 18:59:452015亞冠之浦和紅鉆
日期:2015-06-23 19:10:532015亞冠之西悉尼流浪者
日期:2015-08-21 08:40:5815-16賽季CBA聯(lián)賽之山東
日期:2016-01-31 18:25:0515-16賽季CBA聯(lián)賽之四川
日期:2016-02-16 16:08:30程序設(shè)計(jì)版塊每日發(fā)帖之星
日期:2016-06-29 06:20:002017金雞報(bào)曉
日期:2017-01-10 15:19:5615-16賽季CBA聯(lián)賽之佛山
日期:2017-02-27 20:41:19
4 [報(bào)告]
發(fā)表于 2015-09-15 10:36 |只看該作者
#!/bin/bash
awk -F, '{
print $4", "$0
}' $*|
sort|
awk -F, '
$1 == LastState {
print "\t" $2
}
$1 != LastState {
LastState = $1
print $1
print "\t" $2
}'

論壇徽章:
8
摩羯座
日期:2014-11-26 18:59:452015亞冠之浦和紅鉆
日期:2015-06-23 19:10:532015亞冠之西悉尼流浪者
日期:2015-08-21 08:40:5815-16賽季CBA聯(lián)賽之山東
日期:2016-01-31 18:25:0515-16賽季CBA聯(lián)賽之四川
日期:2016-02-16 16:08:30程序設(shè)計(jì)版塊每日發(fā)帖之星
日期:2016-06-29 06:20:002017金雞報(bào)曉
日期:2017-01-10 15:19:5615-16賽季CBA聯(lián)賽之佛山
日期:2017-02-27 20:41:19
5 [報(bào)告]
發(fā)表于 2015-09-15 10:38 |只看該作者
那句紅色的和你最初的提問(wèn)一致嗎?

論壇徽章:
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
6 [報(bào)告]
發(fā)表于 2015-09-15 10:39 |只看該作者
awk -F, '
    $1 == LastState {
        print "\t" $2
    }
    $1 != LastState {
        LastState = $1
        print $1
        print "\t" $2
    }
'
處理第一行的時(shí)候,LastState這個(gè)變量沒(méi)有值,$1 == LastState 為 false,$1 != LastState 為 true 然后進(jìn)行賦值操作 LastState = $1
處理第二行的時(shí)候,LastState有值啦

論壇徽章:
1
白銀圣斗士
日期:2015-11-23 10:45:24
7 [報(bào)告]
發(fā)表于 2015-09-15 10:43 |只看該作者
回復(fù) 5# waker

修改過(guò)了,現(xiàn)在的是對(duì)的。
   

論壇徽章:
1
白銀圣斗士
日期:2015-11-23 10:45:24
8 [報(bào)告]
發(fā)表于 2015-09-15 11:01 |只看該作者
回復(fù) 6# Shell_HAT
按照這個(gè)解釋那我是否可以把這兩個(gè)條件前后顛倒一下呢?(剛才試了一下,發(fā)現(xiàn)結(jié)果是有重復(fù)的部分,不知道問(wèn)題出在哪里?)

[root@localhost shell]# cat byState
#!/bin/bash
awk -F, '{
print $4", "$0
}' $*|
sort|
awk -F, '
$1 != LastState {
LastState = $1
print $1
print "\t" $2
}
$1 == LastState {
print "\t" $2
}'
[root@localhost shell]# sed -f nameState list | bash byState
California
         Amy Wilde
         Amy Wilde
Masschusetts
         Eric Adams
         Eric Adams
         John Daggett
         Sal Carpenter
Oklahoma
         Orville Thomas
         Orville Thomas
Pennsylvania
         Terry Kalkas
         Terry Kalkas
Virginia
         Alice Ford
         Alice Ford
         Hubert Sims

論壇徽章:
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 [報(bào)告]
發(fā)表于 2015-09-15 12:33 |只看該作者
回復(fù) 8# helloclei


    順序是不能顛倒的。不要讓shell去執(zhí)行這個(gè)代碼,從文本第一行開(kāi)始處理,自己在紙上寫(xiě)寫(xiě)就明白了。

論壇徽章:
1
白銀圣斗士
日期:2015-11-23 10:45:24
10 [報(bào)告]
發(fā)表于 2015-09-15 14:10 |只看該作者
回復(fù) 9# Shell_HAT


    哈哈,謝謝黑哥,在紙上寫(xiě)寫(xiě)果然明白了這個(gè)邏輯,不過(guò)你說(shuō)不能用shell是什么意思?因?yàn)槲疫@個(gè)byState腳本開(kāi)頭就是表明使用shell了。
您需要登錄后才可以回帖 登錄 | 注冊(cè)

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

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP