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

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

Chinaunix

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

[學(xué)習(xí)共享] 向awk傳遞外部參數(shù)的四個(gè)方法總結(jié)(直接傳遞、-v選項(xiàng)、ARGV數(shù)組、間接引用) [復(fù)制鏈接]

論壇徽章:
1
技術(shù)圖書(shū)徽章
日期:2016-02-03 16:35:25
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報(bào)告]
發(fā)表于 2015-12-11 20:07 |只看該作者 |倒序?yàn)g覽
本帖最后由 陳卓文 于 2015-12-14 15:45 編輯

(一)直接傳遞
參數(shù)寫(xiě)在輸入文本之前,腳本之后
awk 'Script' var=value inputfile    #單個(gè)參數(shù)
awk -f scriptfile var1=value1 var2=value2 inputfile   #多個(gè)參數(shù)

缺點(diǎn):命令行參數(shù)的限制是他們?cè)贐EGIN過(guò)程中是不可用的,直到首行輸入完成以后它們才可用。BEGIN是在首行輸入前執(zhí)行。
$  echo | awk 'BEGIN{print n}' n=1  
                                   # 此命令打印出空,并沒(méi)有打印1

(二)-v選項(xiàng)
-v 選項(xiàng),指定在任何輸入被讀入前定義參數(shù) #指定執(zhí)行BEGIN前的變量賦值
例子:
awk -v var=value  inputfile
$  echo | awk -v n=1 'BEGIN{print n}'
1                                 

(三)系統(tǒng)內(nèi)置變量ARGV數(shù)組
ARGV[N],ARGV[0]為awk,下標(biāo)從1開(kāi)始是輸入的參數(shù)。
例子:
$ echo | awk 'BEGIN{print ARGV[0]}' var1  
awk
$    echo | awk 'BEGIN{print ARGV[1]}' var1  var2
var1
$    echo | awk 'BEGIN{print ARGV[2]}' var1  var2
var2

(四)間接引用 \$${VAR}
間接變量引用避免了在一個(gè)內(nèi)嵌awk腳本中引用shell變量的混亂行為

例子:
#!/bin/bash
# 這是" 求文件中指定列的總和" 腳本的另一個(gè)版本,
#+ 這個(gè)腳本可以計(jì)算目標(biāo)文件中指定列( 此列的內(nèi)容必須都是數(shù)字) 的所有數(shù)字的和.
# 這個(gè)腳本使用了間接引用.
ARGS=2
E_WRONGARGS=65
  if [ $# -ne "$ARGS" ] # 檢查命令行參數(shù)的個(gè)數(shù)是否合適.
  then
   echo "Usage: `basename $0` filename column-number"
   exit $E_WRONGARGS
  fi

  filename=$1
  column_number=$2  ######使用時(shí)指定計(jì)算列數(shù)######

  # awk腳本開(kāi)始.
  # ------------------------------------------------
  awk "   #注意此處使用的是雙引號(hào)而不是單引號(hào)

  { total += \$${column_number} # 間接引用,先將列數(shù)的變量替換得到$N,$N對(duì)應(yīng)awk的列數(shù)
  }
  END {
   print total
   }
   " "$filename"
  # ------------------------------------------------
  # awk腳本結(jié)束.
  exit 0

另一解決辦法:

  awk -v N=$column_number " #傳遞了column_number給N變量到awk中

  { total += \$N    # N 先替換為變量$column-number指定數(shù)字,再執(zhí)行$number執(zhí)行列數(shù)
  }
  END {
   print total
   }
   " "$filename"
  # ------------------------------------------------
  # awk腳本結(jié)束




小弟在學(xué)習(xí)awk總結(jié)了4個(gè)方法,大家還有其他辦法可以相互討論學(xué)習(xí)!謝謝~

論壇徽章:
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-12-12 11:51 |只看該作者
還可以利用"" ''的中的變量替代
gawk可以使用ENVIRON調(diào)用環(huán)境變量

論壇徽章:
1
技術(shù)圖書(shū)徽章
日期:2016-02-03 16:35:25
3 [報(bào)告]
發(fā)表于 2015-12-12 12:16 |只看該作者
有沒(méi)有具體實(shí)例啊
回復(fù) 2# waker


   

論壇徽章:
1
技術(shù)圖書(shū)徽章
日期:2016-02-03 16:35:25
4 [報(bào)告]
發(fā)表于 2015-12-14 15:30 |只看該作者
waker指點(diǎn)的用法

(五)export結(jié)合系統(tǒng)內(nèi)置變量ENVIRON

#!/bin/bash

# 這是" 求列的和" 腳本的另外一個(gè)版本(col-totaler.sh)
# 這個(gè)版本將把一個(gè)變量通過(guò)export的形式傳遞到'awk' 中 . . .
#+ 并且把a(bǔ)wk腳本放到一個(gè)變量中.

ARGS=2
  E_WRONGARGS=65

  if [ $# -ne "$ARGS" ] # 檢查命令行參數(shù)的個(gè)數(shù).
  then
   echo "Usage: `basename $0` filename column-number"
   exit $E_WRONGARGS
  fi

  filename=$1
  column_number=$2

  #===== 上邊的這部分, 與原始腳本完全一樣 =====#

  export column_number
  # 將列號(hào)export出來(lái), 這樣后邊的進(jìn)程就可用了.


  # -----------------------------------------------
  awkscript='{ total += $ENVIRON["column_number"] }
  END { print total }'
  # 是的, 變量可以保存awk腳本.
  # -----------------------------------------------

  # 現(xiàn)在, 運(yùn)行這個(gè)awk腳本.
  awk "$awkscript" "$filename"

  exit 0
您需要登錄后才可以回帖 登錄 | 注冊(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