2、linux shell awk獲得外部變量(變量傳值)簡(jiǎn)介

這里提到awk,相信寫shell的朋友都會(huì)接觸到。AWK 是一種用于處理文本的編程語言工具。AWK 提供了極其強(qiáng)大的功能:

可以進(jìn)行正則表達(dá)式的匹配

樣式裝入

流控制

數(shù)學(xué)運(yùn)算符

進(jìn)程控制語句

內(nèi)置的變量和函數(shù)

可以把a(bǔ)wk看作一門完全的程序設(shè)計(jì)語言,它處理文本的速度是快得驚人的。現(xiàn)在很多基于shell 日志分析工具都可以用它完成。設(shè)計(jì)簡(jiǎn)單,速度表現(xiàn)很好。 涉及到以上六個(gè)方面內(nèi)容,我會(huì)在以后文章中加以介紹。 這次主要說下,怎么樣把外部變量傳入到awk執(zhí)行語句中。

一、基礎(chǔ):

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中兩個(gè)特別的表達(dá)式,BEGIN和END,這兩者都可用于pattern中(參考前面的awk語法),提供BEGIN和END的作用是給程序賦予初始狀態(tài)和在程序結(jié)束之后執(zhí)行一些掃尾的工作。任何在BEGIN之后列出的操作(在{}內(nèi))將在awk開始掃描輸入之前執(zhí)行,而END之后列出的操作將在掃描完全部的輸入之后執(zhí)行。因此,通常使用BEGIN來顯示變量和預(yù)置(初始化)變量,使用END來輸出最終結(jié)果。

二、獲得外部變量方法

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.獲得環(huán)境變量

[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

.......

只需要調(diào)用:awk內(nèi)置變量 ENVIRON,就可以直接獲得環(huán)境變量。它是一個(gè)字典數(shù)組。環(huán)境變量名 就是它的鍵值。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 轉(zhuǎn)載 原文的排版和內(nèi)容都更加友好,并且詳細(xì),我只是在這里貼出了一部分留作自己以后參考和學(xué)習(xí),如希望更詳細(xì)了解AWK...
    XKirk閱讀 3,367評(píng)論 2 25
  • 這里提到awk,相信寫shell的朋友都會(huì)接觸到。AWK 是一種用于處理文本的編程語言工具。AWK 提供了極其強(qiáng)大...
    大福技術(shù)閱讀 1,185評(píng)論 0 0
  • awk命令的基本使用 [root@shellscript ~]# head -n 3 /etc/passwd | ...
    古寒飛閱讀 1,107評(píng)論 0 2
  • 本章主要學(xué)習(xí)內(nèi)容awk介紹 ?awk基本用法 ?awk變量 ?awk格式化 ?awk操作符 ?awk條件判斷 ?a...
    楠人幫閱讀 1,376評(píng)論 0 8
  • 不知道你是否會(huì)有這樣的體驗(yàn),工作之余總喜歡擺弄手機(jī),其實(shí)并沒有什么要緊的事,只是刷刷微信,看看qq,再看看微...
    腳踏實(shí)地仰望星空66閱讀 444評(píng)論 0 1

友情鏈接更多精彩內(nèi)容