awk呼叫函式---內部定義函式和外部shell定義函式
背景
在處理資料的時候對於一些文字需要做預處理;或者這些文字是通過一系列的處理演變得出;這些都寫在awk中一是程式顯得臃腫混亂,二是耦合性太強。
shell函式
先溫習一下普通shell的寫法
[[email protected] ~]# vim funComm.sh
#!/bin/bash
#編寫shell function輸出結果可以使用變數進行接收,然後處理
function funComm()
{
if [ -z "$1" ]
then
echo 0
else
echo 1
fi
}
#編寫shell function使用return可以使用最後退出狀態獲取處理
function funComm2()
{
if [ -z "$1" ]
then
return 0
else
return 1
fi
}
funComm2 x
if [ $? -eq 1 ]
then
echo "funcomm2NotNull"
else
echo "funcomm2Null"
fi
if [ `funComm2 x` $? -eq 1 ]
then
echo "funcomm2NotNull"
else
echo "funcomm2Null"
fi
if [ `funComm xxx` -eq 1 ]
then
echo "funCommNotNull"
else
echo "funCommNull"
fi
除錯執行結果如下:
[[email protected] ~]# bash -x funComm.sh
+ funComm2 x
+ '[' -z x ']'
+ return 1
+ '[' 1 -eq 1 ']'
+ echo funcomm2NotNull
funcomm2NotNull
++ funComm2 x
++ '[' -z x ']'
++ return 1
+ '[' 1 -eq 1 ']'
+ echo funcomm2NotNull
funcomm2NotNull
++ funComm xxx
++ '[' -z xxx ']'
++ echo 1
+ '[' 1 -eq 1 ']'
+ echo funCommNotNull
funCommNotNull
以上的普通函式包含幾個知識點
1、函式定義格式
2、比較的用法
3、函式呼叫方法
4、分支控制
可以參考shell基礎
awk呼叫內部定義函式
在部落格GNU awk介紹中已經有示例我直接拿過來用 GNU awk示例連線
[[email protected] ~]# awk 'function fun(a,b){return a+b}BEGIN{print fun(1,2)}'
3
這是awk呼叫自己內部定義的函式
awk呼叫外部定義函式
awk中如果需要呼叫shell函式需要將函式export為系統引數,然後呼叫的時候用system;
[[email protected] ~]# cat funComm.sh
#!/bin/bash
function funComm()
{
if [ -z "$1" ]
then
echo 0
else
echo 1
fi
}
function funComm2()
{
if [ -z "$1" ]
then
return 0
else
return 1
fi
}
funComm2 x
if [ $? -eq 1 ]
then
echo "funcomm2NotNull"
else
echo "funcomm2Null"
fi
if [ `funComm2 x` $? -eq 1 ]
then
echo "funcomm2NotNull"
else
echo "funcomm2Null"
fi
if [ `funComm xxx` -eq 1 ]
then
echo "funCommNotNull"
else
echo "funCommNull"
fi
export -f funComm
awk 'BEGIN{
printf "awk call shell function: "
_value=system("funComm x")
if(_value == "0")
{
print "awk funComm not null"
}
else
{
print "awk funComm null"
}
}'
exit
除錯執行結果如下:
[[email protected] ~]# bash -x funComm.sh
+ funComm2 x
+ '[' -z x ']'
+ return 1
+ '[' 1 -eq 1 ']'
+ echo funcomm2NotNull
funcomm2NotNull
++ funComm2 x
++ '[' -z x ']'
++ return 1
+ '[' 1 -eq 1 ']'
+ echo funcomm2NotNull
funcomm2NotNull
++ funComm xxx
++ '[' -z xxx ']'
++ echo 1
+ '[' 1 -eq 1 ']'
+ echo funCommNotNull
funCommNotNull
+ export -f funComm
+ awk 'BEGIN{
printf "awk call shell function: "
_value=system("funComm x")
if(_value == "0")
{
print "awk funComm not null"
}
else
{
print "awk funComm null"
}
}'
awk call shell function: 1
awk funComm not null
+ exit
相關推薦
awk呼叫函式---內部定義函式和外部shell定義函式
背景 在處理資料的時候對於一些文字需要做預處理;或者這些文字是通過一系列的處理演變得出;這些都寫在awk中一是程式顯得臃腫混亂,二是耦合性太強。 shell函式 先溫習一下普通shell的寫法 [[email protected] ~]
js建構函式裡的方法和prototype上定義方法的區別
建構函式裡的方法 function Fun1(arg) { this.arg = arg; this.test = function(){ return this.arg; } } 函式內的方法相當於是函式的私有變數,如果新建立的物件需要使用裡面的私有
自定義數字和字串的轉換函式
C語言中,常見的字串與數字之間的相互轉換的庫函式有:atof(字串轉換成浮點數)、atoi(字串轉換成整型數)、atol(字串轉換成長整形數)、itoa(整型數轉換成字串)、ltoa(長整型數轉換成字串)等。在求職中,讓求職者自定義此類函式的實現是為了考察求職者
android獲取手機內部儲存空間和外部儲存空間
分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!  
java8新特性[2]:內部迭代和外部迭代(Internal vs external iteration)
Java8 增加了新的語言特性(例如 lambda 表示式和預設方法),為此 Java8 的類庫也進行了很多改進,例如從外部迭代到內部迭代的改變。 集合類庫主要依賴於外部迭代(external iteration)。Collection 實現 Iterable 介面,從而使得使用者可以依次遍歷集
hive中管理表(內部表)和外部表的區別是什麼,及分割槽表使用場景
⑴區別: ①Hive建立內部表時(預設建立內部表),會將資料移動到資料倉庫指向的路徑;建立外部表(需要加關鍵字external),僅記錄資料所在的路徑,不對資料的位置做任何改變; ⑵Hive刪除表時,內部表的元資料和資料會被一起刪除,而外部表只刪除元資料,不刪除資料;
STM32使用內部晶振和外部晶振
在STM32上如果不使用外部晶振,OSC_IN和OSC_OUT的接法如果使用內部RC振盪器而不使用外部晶振,請按照下面方法處理:1)對於100腳或144腳的產品,OSC_IN應接地,OSC_OUT應懸空。2)對於少於100腳的產品,有2種接法:2.1)OSC_IN和OSC_
非阻塞賦值的內部延時和外部延時
學習verilog有一段時間了,從字面上理解,阻塞和非阻塞的區別很直白。 前者是序列,主要用於描述組合邏輯,和軟體中的賦值類似;後者是並行,主要用於描述時序邏輯。 但是和內部延時、外部延時混用在一起的時候,各種意想不到的情況就會發生。 下面將介紹,對於非阻塞賦值,內部延遲和
STM32使用內部振盪器及其和外部晶體振盪器的區別
在STM32上如果不使用外部晶振,OSC_IN和OSC_OUT的接法如果使用內部RC振盪器而不使用外部晶振,請按照下面方法處理:1)對於100腳或144腳的產品,OSC_IN應接地,OSC_OUT應懸空。2)對於少於100腳的產品,有2種接法:2.1)OSC_IN和OSC_O
內部跳轉和外部跳轉的區別,底層實現原理
他們的區別是: response.sendRedirect是向客戶瀏覽器傳送頁面重定向指令,瀏覽器接收後將向web伺服器重新發送頁面請求,所以執行完後瀏覽器的url顯示的是跳轉後的頁面。跳轉頁面可以是一個任意的url(本伺服器的和其他伺服器的均可)。 RequestDispatcher.forward則是直接
const、static、內部連結屬性和外部連結屬性整理
開發十年,就只剩下這套架構體系了! >>>
動態語言、靜態語言、強型別定義語言和弱型別定義語言區別
呵~~(冷笑) 第一次接觸pythod,是一個朋友告知我它是一種弱型別語言,不用規定變數型別,於是”python=弱型別“ 的概念在我腦海紮根,並且深信不疑!! 然後每每和別人談起pythod時,我就會以資深口吻”哦,pythod啊,它是一種弱型別語言“開頭~~
java中定義常量和C#中定義常量的區別
一、常量定義的基本注意事項。 在Java語言中,主要是利用final關鍵字()來定義常量。當常量被設定後,一般情況下就不允許再進行更改。如可以利用如下的形式來定義一個常量:final double PI=3.1315。在定義這個常量時,需要注意如下內容: 一是常
vue全域性自定義指令和區域性自定義指令
除了預設設定的核心指令 (v-model 和 v-show),Vue 也允許註冊自定義指令。 區域性自定義指令(只針對元件內的元素) 父元件app.vue <template> <div id="app">
C++中帶有預設引數的宣告和定義。Qt中重寫預設建構函式。C++中函式呼叫時實參個數和函式定義時的形參個數不一致時的處理。
1、Qt中自動生成的建構函式 (1)Qt中自動生成的建構函式的宣告 class Chat : public QWidget { Q_OBJECT public: explicit Chat(QWidget *parent = 0); //宣告建構函式,可以帶有初始值“=0”
php中函式內部呼叫外部變數
php函式在使用外部變數的幾種情況。 外部用global定義 函式內使用$GLOBALS陣列引用 global $mytext; $mytext="外部使用global定義"; function test(){ echo $GLOBALS['
shell 指令碼-函式的定義和呼叫
fun() { echo I am function } # invoking function fun fun2() { echo I am functionii2 echo haha } #呼叫函式 X=`fun2` echo $X fun3() { echo
JS怎樣在外部呼叫函式內部的函式
宣告一個全域性變數,在函式內部給函式賦值給該變數,然後在外部通過變數呼叫。 var outVal = 'jack'; // 宣告一個變數,稍後呼叫 var later; function outer() { var innerVal = 'sam'; function inner
定義平面中的一個Circle類, 1編寫一個無引數建構函式, 2編寫一個有參的建構函式 3在主函式中呼叫無參建構函式生成圓的例項c1,呼叫有參建構函式生成圓的例項c2,呼叫例項方法判斷c1和c2是否重
定義平面中的一個Circle類, 1編寫一個無引數建構函式, 2編寫一個有參的建構函式 3在主函式中呼叫無參建構函式生成圓的例項c1,呼叫有參建構函式生成圓的例項c2,呼叫例項方法判斷c1和c2是否重疊 class Point { double x; double y
awk呼叫shell命令與getline和system函式
total14 -rw-r--r-- 1 Administrator None 2 Mar 3 20:20 4 -rw-r--r-- 1 Administrator None 0 Feb 28 19:49 4]] -rw-r--r-- 1 Administrator None 87 Mar 5 20:22 a