awk的模組化方案,在這公司苦逼很久以後想到的

來源:互聯網
上載者:User

test.sh

#!/bin/shecho demos | igawk -f test.awk

test.awk

#!/usr/bin/igawk -f@include common.awk{    filename = $0    makeArray(filename,array)    printArray(array)    makeInsertSQL("aaa",array,"test.sql")}

common.awk

function sayHello(s,_ARGVEND_){    print "hello "s}function makeArray(filename,array,_ARGVEND_){    while(getline < filename == 1)    {        array[$1] = $2    }}function printArray(array,_ARGVEND_,i){    for(i in array)    {        print i" "array[i]    }}function makeInsertSQL(tablename,array,filename,_ARGVEND_,i){    keys   = ""    values = ""    for(i in array)    {        keys = keys "" i ","        values = values "\"" array[i] "\","    }    keys = substr(keys, 1, length(keys)-1)    values = substr(values, 1, length(values)-1)        insertSQL = "insert into " tablename "(" keys ") values(" values ");"    if(filename == "")    {        print insertSQL    }    else    {        print insertSQL >> filename    }}

test.sh是程式進入點,test.awk至少是承擔了部分的商務邏輯,common.awk則是可以複用的函數

這種方案至少比在shell指令碼裡編寫一個長長的字串要好的多(300~500+行的代碼,一般都是SHELL從資料庫讀出資料,存在臨時檔案,讓awk讀入處理,再寫入資料庫,每一個程式都無法複用),無論是可讀性還是複用性,自從我到這個苦逼公司入職以後,怎麼把代碼寫好一直是我所思考的事情,當然,中間我受了一些打擊,一度放棄這個想法,但是最終我還是找到了我想要的方案(也許不是最終方案,最終方案每個模組每個API應該是可以測試的),我很詫異於他們公司一個離職的老員工,寫了3年的shell+awk居然沒有想,怎麼樣把代碼寫好。或許,熱情,才是我們最寶貴的財富。合理的激發,使用,保護員工的熱情,對於一個公司相當之重要

 

目前的代碼風格

#!/bin/sh#目前的功能都在這個檔案裡,無法複用,甚至很難讀#你知道字串裡的關鍵字永遠是暗紅色,暗紅色,暗紅色,寡人要吐了cat filename | awk \-v sqlfilename=$filename \'{    #read line of filename to array}END{    for(i in array)    {        print sql >> sqlfilename    }}'

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.