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

  免費注冊 查看新帖 |

Chinaunix

  平臺 論壇 博客 文庫
論壇 程序設計 Shell awk RS
最近訪問板塊 發(fā)新帖
查看: 2355 | 回復: 9
打印 上一主題 下一主題

[文本處理] awk RS [復制鏈接]

論壇徽章:
12
IT運維版塊每日發(fā)帖之星
日期:2015-11-17 06:20:00程序設計版塊每日發(fā)帖之星
日期:2016-01-19 06:20:0015-16賽季CBA聯(lián)賽之江蘇
日期:2016-01-17 15:31:3915-16賽季CBA聯(lián)賽之上海
日期:2016-01-16 15:44:3015-16賽季CBA聯(lián)賽之浙江
日期:2016-01-15 20:38:1815-16賽季CBA聯(lián)賽之北京
日期:2016-01-09 14:30:15CU十四周年紀念徽章
日期:2016-01-07 12:31:5115-16賽季CBA聯(lián)賽之四川
日期:2016-01-01 11:49:1515-16賽季CBA聯(lián)賽之深圳
日期:2015-12-24 14:23:4115-16賽季CBA聯(lián)賽之山西
日期:2015-12-15 16:22:31技術圖書徽章
日期:2015-12-10 17:41:0015-16賽季CBA聯(lián)賽之北控
日期:2016-02-03 10:03:24
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報告]
發(fā)表于 2015-10-16 17:54 |只看該作者 |倒序瀏覽
本帖最后由 sync_1521 于 2015-10-16 17:55 編輯

各位大神問個問題,謝謝!
test@sever:/tmp> cat 2
aaa
bbb
cc
aaa
cc
aaa
test@sever:/tmp> awk -v RS="cc" '{print $0}' 2
aaa
bbb


aaa


aaa

test@sever:/tmp> awk -v RS="cc" '{$1=$1}{print $0}' 2
aaa bbb
aaa
aaa

為什么加了$1=$1后就把第一第二第三行中的\n給去掉了?

論壇徽章:
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程序設計版塊每日發(fā)帖之星
日期:2016-06-29 06:20:002017金雞報曉
日期:2017-01-10 15:19:5615-16賽季CBA聯(lián)賽之佛山
日期:2017-02-27 20:41:19
2 [報告]
發(fā)表于 2015-10-16 18:09 |只看該作者
Changing FS Does Not Affect the Fields
According to the POSIX standard, awk is supposed to behave as if each record is split into fields at the time it is read. In particular, this means that if you change the value of FS after a record is read, the values of the fields (i.e., how they were split) should reflect the old value of FS, not the new one.

However, many older implementations of awk do not work this way. Instead, they defer splitting the fields until a field is actually referenced. The fields are split using the current value of FS! (d.c.) This behavior can be difficult to diagnose. The following example illustrates the difference between the two methods:

sed 1q /etc/passwd | awk '{ FS = ":" ; print $1 }'
which usually prints:

root
on an incorrect implementation of awk, while gawk prints the full first line of the file, something like:

root:0:0:Root:/:
(The sed23 command prints just the first line of /etc/passwd.)

論壇徽章:
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程序設計版塊每日發(fā)帖之星
日期:2016-06-29 06:20:002017金雞報曉
日期:2017-01-10 15:19:5615-16賽季CBA聯(lián)賽之佛山
日期:2017-02-27 20:41:19
3 [報告]
發(fā)表于 2015-10-16 18:10 |只看該作者
如果你用的是gawk,它是不符合posix標準的

論壇徽章:
12
IT運維版塊每日發(fā)帖之星
日期:2015-11-17 06:20:00程序設計版塊每日發(fā)帖之星
日期:2016-01-19 06:20:0015-16賽季CBA聯(lián)賽之江蘇
日期:2016-01-17 15:31:3915-16賽季CBA聯(lián)賽之上海
日期:2016-01-16 15:44:3015-16賽季CBA聯(lián)賽之浙江
日期:2016-01-15 20:38:1815-16賽季CBA聯(lián)賽之北京
日期:2016-01-09 14:30:15CU十四周年紀念徽章
日期:2016-01-07 12:31:5115-16賽季CBA聯(lián)賽之四川
日期:2016-01-01 11:49:1515-16賽季CBA聯(lián)賽之深圳
日期:2015-12-24 14:23:4115-16賽季CBA聯(lián)賽之山西
日期:2015-12-15 16:22:31技術圖書徽章
日期:2015-12-10 17:41:0015-16賽季CBA聯(lián)賽之北控
日期:2016-02-03 10:03:24
4 [報告]
發(fā)表于 2015-10-16 18:36 |只看該作者
本帖最后由 sync_1521 于 2015-10-16 18:44 編輯

沒看懂。。
我知道OFS有這么一種說法$1=$1后OFS才會生效
如:
test@sever:/tmp> echo "a b c" |awk -vOFS=":" '{print $0}'
a b c
test@sever:/tmp> echo "a b c" |awk -vOFS=":" '{$1=$1;print $0}'
a:b:c

但是這個RS應該是用$1=$1和不用$1=$1都生效了的
test@sever:/tmp> cat 2
aaa
bbb
cc
aaa
cc
aaa
test@sever:/tmp> awk -v RS="cc" '{print $0}' 2
aaa
bbb


aaa


aaa

注:指定RS="cc"后,整個文件2被分成3行,第一行$0=aaa\nbbb\n
                                                         第二行$0=aaa\n
                                                         第三行$0=aaa
    所以awk在讀入第一行執(zhí)行print $0時輸出aaa\nbbb\n\n
          awk在讀入第二行執(zhí)行print $0時輸出aaa\n\n
          awk在讀入第三行執(zhí)行print $0時輸出aaa\n
           
test@sever:/tmp> awk -v RS="cc" '{$1=$1}{print $0}' 2
aaa bbb
aaa
aaa

而這個例子,我就不明白$1=$1后 第一行執(zhí)行print $0時輸出aaa bbb\n
                                            第二行執(zhí)行print $0時輸出aaa\n   
                                            第三行執(zhí)行print $0時輸出aaa\n
這個$1=$1把\n全干掉了                  
                                 
回復 3# waker


   

論壇徽章:
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程序設計版塊每日發(fā)帖之星
日期:2016-06-29 06:20:002017金雞報曉
日期:2017-01-10 15:19:5615-16賽季CBA聯(lián)賽之佛山
日期:2017-02-27 20:41:19
5 [報告]
發(fā)表于 2015-10-16 18:51 |只看該作者
\n被去除是域拆分的結果,和RS沒關系

論壇徽章:
16
CU十二周年紀念徽章
日期:2013-10-24 15:41:3415-16賽季CBA聯(lián)賽之廣東
日期:2015-12-23 21:21:55青銅圣斗士
日期:2015-12-05 10:35:30黃金圣斗士
日期:2015-11-26 20:42:16神斗士
日期:2015-11-19 12:47:50每日論壇發(fā)貼之星
日期:2015-11-18 06:20:00程序設計版塊每日發(fā)帖之星
日期:2015-11-18 06:20:002015亞冠之城南
日期:2015-11-10 19:10:492015亞冠之薩濟拖拉機
日期:2015-10-28 18:47:282015亞冠之柏太陽神
日期:2015-08-30 17:21:492015亞冠之山東魯能
日期:2015-07-07 18:48:39摩羯座
日期:2014-08-29 23:01:42
6 [報告]
發(fā)表于 2015-10-16 19:56 |只看該作者
Assigning a value to an existing field causes the whole record to be rebuilt when  $0  is  referenced.   Simi-
       larly, assigning a value to $0 causes the record to be resplit, creating new values for the fields.

$1=$1賦值,在print $0 的時候會根據(jù)OFS重新build $0
所以導致$0的換行符號替換為了空格(默認的OFS為空格)

論壇徽章:
0
7 [報告]
發(fā)表于 2015-10-18 15:24 |只看該作者
test@sever:/tmp> awk -v RS="cc" '{print $0}' 2
aaa
bbb


aaa


aaa

注:指定RS="cc"后,整個文件2被分成3行,第一行$0=aaa\nbbb\n
                                                         第二行$0=aaa\n
                                                         第三行$0=aaa
    所以awk在讀入第一行執(zhí)行print $0時輸出aaa\nbbb\n\n
          awk在讀入第二行執(zhí)行print $0時輸出aaa\n\n
          awk在讀入第三行執(zhí)行print $0時輸出aaa\n
           


這里我是這么理解的:
制定RS="cc"后,整個文件2被分成3個record,第一個record $0=aaa
                                                                                           bbb
                                                                                          
                                                                第二個record $0=aaa
                                                                                    
                                                                  第三個record $0=aaa
所以 awk 在讀入第一個record,執(zhí)行print $0時輸出 aaa bbb   ($0 的第一二行 ”空格“ ”tab“  ”\n" 當作 FS  ,而 OFS 為 空格)
                                                                                      ($0的第三行--空行--因為“$1"為空,所以awk沉默,無輸出)
...
...

論壇徽章:
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
8 [報告]
發(fā)表于 2015-10-18 20:52 |只看該作者

論壇徽章:
12
IT運維版塊每日發(fā)帖之星
日期:2015-11-17 06:20:00程序設計版塊每日發(fā)帖之星
日期:2016-01-19 06:20:0015-16賽季CBA聯(lián)賽之江蘇
日期:2016-01-17 15:31:3915-16賽季CBA聯(lián)賽之上海
日期:2016-01-16 15:44:3015-16賽季CBA聯(lián)賽之浙江
日期:2016-01-15 20:38:1815-16賽季CBA聯(lián)賽之北京
日期:2016-01-09 14:30:15CU十四周年紀念徽章
日期:2016-01-07 12:31:5115-16賽季CBA聯(lián)賽之四川
日期:2016-01-01 11:49:1515-16賽季CBA聯(lián)賽之深圳
日期:2015-12-24 14:23:4115-16賽季CBA聯(lián)賽之山西
日期:2015-12-15 16:22:31技術圖書徽章
日期:2015-12-10 17:41:0015-16賽季CBA聯(lián)賽之北控
日期:2016-02-03 10:03:24
9 [報告]
發(fā)表于 2015-10-19 09:35 |只看該作者
謝謝各位的回復,大概明白了。
這里面應該有兩個知識點:
1.$1=$1后域根據(jù)OFS(這個OFS因為沒指定,所以默認為空格)重新拆分組合。
2.當RS不為默認的“\n”時,以連續(xù)的 空格 或 制表符(\t) 或 換行符(\n)作為FS(這個例子里就用空格和\n作為FS)。

論壇徽章:
22
處女座
日期:2014-10-11 13:33:292015亞冠之塔什干火車頭
日期:2015-07-20 19:59:042015亞冠之塔什干火車頭
日期:2015-07-26 10:59:31程序設計版塊每日發(fā)帖之星
日期:2015-08-05 06:20:00每日論壇發(fā)貼之星
日期:2015-08-05 06:20:00程序設計版塊每日發(fā)帖之星
日期:2015-08-07 06:20:00每日論壇發(fā)貼之星
日期:2015-08-07 06:20:002015亞冠之阿爾納斯爾
日期:2015-10-01 15:23:28白銀圣斗士
日期:2015-12-07 17:17:06操作系統(tǒng)版塊每日發(fā)帖之星
日期:2015-12-27 06:20:002015亞冠之廣州富力
日期:2015-07-08 15:48:31程序設計版塊每日發(fā)帖之星
日期:2015-06-11 22:20:00
10 [報告]
發(fā)表于 2015-10-24 22:17 |只看該作者
回復 9# sync_1521
你第二條理解可能有些誤會。
一般不管RS是什么,都不影響FS ,\n本來即是RS也是FS,并不是因為改變了RS,\n成了FS
再說特殊情況,那就是當RS=""時(這時候以連續(xù)的空行為RS),如果此時FS是單個字符,比如":",則將\n強制為FS,則FS為":"和\n


   
您需要登錄后才可以回帖 登錄 | 注冊

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

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP