linux shell awk獲得外部變數(變數傳值)簡介_linux shell

來源:互聯網
上載者:User
AWK 提供了極其強大的功能:
  1. 可以進行Regex的匹配
  2. 樣式裝入
  3. 流量控制
  4. 數學運算子
  5. 進程式控制制語句
  6. 內建的變數和函數

可以把awk看作一門完全的程式設計語言,它處理文本的速度是快得驚人的。現在很多基於shell 日誌分析工具都可以用它完成。設計簡單,速度表現很好。 涉及到以上六個方面內容,我會在以後文章中加以介紹。 這次主要說下,怎麼樣把外部變數傳入到awk執行語句中。

一、基礎:

awk [ -F re] [parameter...] ['pattern {action}' ] [-f progfile][in_file...]

awk一般文法如上面所說。

如:

複製代碼 代碼如下:

[chengmo@localhost ~]$ echo 'awk code' | awk 'BEGIN{print "start\n============="}{print $0}END{print "=========\nend"}'
start
=============
awk code
=========
end

在 awk中兩個特別的運算式,BEGIN和END,這兩者都可用於pattern中(參考前面的awk文法),提供BEGIN和END的作用是給程式賦予初始狀態和在程式結束之後執行一些掃尾的工作。任何在BEGIN之後列出的操作(在{}內)將在awk開始掃描輸入之前執行,而END之後列出的操作將在掃描完全部的輸入之後執行。因此,通常使用BEGIN來顯示變數和預置(初始化)變數,使用END來輸出最終結果。

二、獲得外部變數方法

1、獲得普通外部變數

複製代碼 代碼如下:

[chengmo@localhost ~]$ test='awk code'                           
[chengmo@localhost ~]$ echo | awk  '{print test}' test="$test"
awk code
[chengmo@localhost ~]$ echo | awk  test="$test" '{print test}'
awk: cmd. line:1: fatal: cannot open file `{print test}' for reading (No such file or directory)

格式如:awk ‘{action}'  變數名=變數值   ,這樣傳入變數,可以在action中獲得值。 注意:變數名與值放到'{action}'後面。

[chengmo@localhost ~]$ echo | awk  'BEGIN{print test}' test="$test"         

 

這種變數在:BEGIN的action不能獲得。

2.BEGIN程式塊中變數

複製代碼 代碼如下:

[chengmo@localhost ~]$ test='awk code'                                
[chengmo@localhost ~]$ echo | awk -v test="$test" 'BEGIN{print test}'
awk code
[chengmo@localhost ~]$ echo | awk -v test="$test" '{print test}'    
awk code

格式如:awk –v 變數名=變數值 [–v 變數2=值2 …] 'BEGIN{action}'  注意:用-v 傳入變數可以在3中類型的action 中都可以獲得到,但順序在  action前面。

3.獲得環境變數

複製代碼 代碼如下:

[chengmo@localhost ~]$ awk  'BEGIN{for (i in ENVIRON) {print i"="ENVIRON[i];}}'
AWKPATH=.:/usr/share/awk
SSH_ASKPASS=/usr/libexec/openssh/gnome-ssh-askpass
SELINUX_LEVEL_REQUESTED=
SELINUX_ROLE_REQUESTED=
LANG=en_US.UTF-8
....... 

只需要調用:awk內建變數 ENVIRON,就可以直接獲得環境變數。它是一個字典數組。環境變數名 就是它的索引值。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.