老熟女激烈的高潮_日韩一级黄色录像_亚洲1区2区3区视频_精品少妇一区二区三区在线播放_国产欧美日产久久_午夜福利精品导航凹凸

重慶分公司,新征程啟航

為企業(yè)提供網(wǎng)站建設(shè)、域名注冊(cè)、服務(wù)器等服務(wù)

Shell逐行處理文本求和的示例分析

這篇文章主要介紹Shell逐行處理文本求和的示例分析,文中介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們一定要看完!

創(chuàng)新互聯(lián)專注為客戶提供全方位的互聯(lián)網(wǎng)綜合服務(wù),包含不限于網(wǎng)站建設(shè)、成都網(wǎng)站設(shè)計(jì)、陳巴爾虎網(wǎng)絡(luò)推廣、微信平臺(tái)小程序開發(fā)、陳巴爾虎網(wǎng)絡(luò)營(yíng)銷、陳巴爾虎企業(yè)策劃、陳巴爾虎品牌公關(guān)、搜索引擎seo、人物專訪、企業(yè)宣傳片、企業(yè)代運(yùn)營(yíng)等,從售前售中售后,我們都將竭誠(chéng)為您服務(wù),您的肯定,是我們最大的嘉獎(jiǎng);創(chuàng)新互聯(lián)為所有大學(xué)生創(chuàng)業(yè)者提供陳巴爾虎建站搭建服務(wù),24小時(shí)服務(wù)熱線:18980820575,官方網(wǎng)址:www.cdcxhl.com

假設(shè)要要計(jì)算文本test.data的第二列的數(shù)字之和:

1 12  2 23  3 34  4 56

當(dāng)然你可能會(huì)這樣處理:

awk '{s+=$2} END {print s}' test.data

很快就得到了結(jié)果。不過,本文要說的點(diǎn)與awk無(wú)關(guān)。我們通過另外一種方式來計(jì)算,即逐行分析處理的方式。

嘗試一

我們嘗試第一種方式,shell實(shí)現(xiàn)如下:

#!/usr/bin/env bash sum=0 cat test.data | while read line do     temp_num=$(echo "$line" | cut -d ' ' -f 2)     sum=$(( $sum + $temp_num )) done echo "we get sum:$sum"

輸出結(jié)果:

we get sum:0

這是為什么!為什么得到的結(jié)果會(huì)是0呢?

這事壞就壞在腳本中的|,眾所周知,這是一個(gè)管道命令,而這也就意味著,while循環(huán)的執(zhí)行結(jié)果都是在一個(gè)subshell中,一旦這個(gè)subsell退出了,它里面的結(jié)果也就沒有了。

其實(shí)這個(gè)問題利用有了這個(gè)神器,再也不怕shell寫得不對(duì)了中提到的工具很容易發(fā)現(xiàn):

$ shellcheck myscript  Line 3: cat test.data | while read line     ^-- SC2002: Useless cat. Consider 'cmd < file | ..' or 'cmd file | ..' instead.                       ^-- SC2162: read without -r will mangle backslashes.  Line 6:     sum=$(( $sum + $temp_num ))     ^-- SC2030: Modification of sum is local (to subshell caused by pipeline).             ^-- SC2004: $/${} is unnecessary on arithmetic variables.                    ^-- SC2004: $/${} is unnecessary on arithmetic variables.  Line 8: echo "we get sum:$sum"                  ^-- SC2031: sum was modified in a subshell. That change might be lost.  $

嘗試二

既然管道命令不建議用,那么我們使用下面的方式看看:

#!/usr/bin/env bash sum=0 for line in $(cat test.data) do     echo "get line :$line"     temp_num=$(echo "$line" | cut -d ' ' -f 2)     sum=$(( $sum + $temp_num )) done echo "we get sum:$sum"

輸出結(jié)果:

get line :1 get line :12 get line :2 get line :23 get line :3 get line :34 get line :4 get line :56 we get sum:135

從結(jié)果中看出,如果文本中存在空格或者tab等,則看似每次讀取一行,實(shí)際上是遇到空格,tab或換行就停止讀取了,并沒有達(dá)到我們的目的。

我們預(yù)期的應(yīng)該是遇到換行才停止讀取,為了達(dá)到這個(gè)目的,我們可以設(shè)置這個(gè)標(biāo)記,即通過設(shè)置IFS來達(dá)到目的。在上面的shell開頭加上:

IFS=$'\n'

但是修改為這樣之后,在自己的系統(tǒng)上并沒有得到我想要的效果,有知道的讀者可以告知一下。

嘗試三

讓我們?cè)贀Q一種方式:

#!/usr/bin/env bash sum=0 while read line do     echo "line $line"     temp_num=$(echo "$line" | cut -d ' ' -f 2)     sum=$(( $sum + $temp_num )) done < "test.data" echo "we get sum:$sum"

這種方式我們是能得到正確結(jié)果的。

當(dāng)然,如果你要讀取指定列,你還可以像下面這樣做:

#!/usr/bin/env bash sum=0 while read col1 col2 do     sum=$(( $sum + $col2 )) done < "test.data" echo "we get sum:$sum"

其中col1,col2就分別代表了第一列,第二列,使用的時(shí)候,可以直接使用對(duì)應(yīng)列的內(nèi)容。

但是,如果我們要讀取的內(nèi)容包括了轉(zhuǎn)義字符會(huì)怎么辦?例如:

\n 12 \n 23 \n 34 \n 56

執(zhí)行結(jié)果:

line   12 line   23 line   34 line   56 we get sum:125

從結(jié)果可以看到,雖然內(nèi)容能否讀取到,但是內(nèi)容被打印出來的時(shí)候,已經(jīng)變了,\被當(dāng)成轉(zhuǎn)義字符處理了,如果不想讓它轉(zhuǎn)義處理怎么辦?只需要加上-r參數(shù)即可:

while read -r line

總結(jié)

在逐行處理文本過程中,主要關(guān)注以下幾種情況:

  • 行中有空格,tab

  • 行中有轉(zhuǎn)義字符

另外,通過shellcheck工具也會(huì)發(fā)現(xiàn),它并不推薦for in file這種方式逐行處理文本:

Line 3: for line in $(cat test.data)             ^-- SC2013: To read lines rather than words, pipe/redirect to a 'while read' loop.

以上是“Shell逐行處理文本求和的示例分析”這篇文章的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對(duì)大家有幫助,更多相關(guān)知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!


分享文章:Shell逐行處理文本求和的示例分析
新聞來源:http://www.xueling.net.cn/article/ghsdop.html

其他資訊

在線咨詢
服務(wù)熱線
服務(wù)熱線:028-86922220
TOP
主站蜘蛛池模板: 热久久999| 国产高清色高清在线观看 | 国产强被迫伦姧在线观看无码 | kk7777kk视频在线观看 | 激情久久一区二区三区 | 欧美younv交| 888夜夜爽夜夜躁精品 | 成人免费观看网址 | 秋霞久久久 | 极品少妇XXXX| 亚洲美女高潮久久久久潘金莲 | 日本网站免费在线观看 | 国产精品久久久久一区二区 | 欧美日韩精品在线免费观看 | 131MM少妇做爰视频 | 一区二区视 | 久久久999精品视频 欧美一级二级视频 | 亚洲精品国产剧情久久9191 | 一区二区无码免费视频网站 | 日本十八禁免费看污网站 | 精品熟人一区二区三区四区 | 日本三级黄色录像 | 亚洲国产精品人人爽夜夜爽 | 天天爽av| 国偷自产av一区二区三区麻豆 | 日本理论在线播放 | 日本爆乳片手机在线播放 | 女人与禽姓交视免费看 | www.草逼.com| 成年人久久久 | 91大神在线免费?看 h免费看 | 久久99婷婷国产精品免费 | 国产黑色丝袜在线视频 | JAPANESE厨房乱TUB | 麻豆视传媒短视频免费官网 | 黄色成人一级片 | 国产9999精品 | 四虎影视网站 | 国产精品18久久久久久白浆动漫 | 俺去俺来也在线WWW色官网 | 日韩精品二区 |