透過SQLite3 來用一指令實現SQL讀取CSV檔

看到DK的文章上提到這個功能覺得也太有趣了, 沒想到會有這麼簡單方式來從CSV檔中讀取想要的內容…

使用方式

將sqlite3 透過memory的方式讀取了以後, 就可以透過SQL來找到其中想要的內容了…

sqlite3 :memory: -cmd '.mode csv' -cmd '.import mds_content_status.csv temp' -cmd '.mode column' 'SELECT * FROM temp'

為了讓使用方式更方便, 還可以在.bashrc.zshrc中把上面的cli 指令包裝成 shell function 如下:

function query_csv() {
    local CSV_FILE=$1
    local TABLE=$2
    local QUERY=$3

    sqlite3 :memory: -cmd '.headers on' -cmd '.mode csv' -cmd ".import ${CSV_FILE} ${TABLE}" -cmd '.mode column' "${QUERY}"
}

然後我們就可以用下面的方式去query了…

query_csv users.csv user_table 'SELECT id, name FROM user_table where id=17807'

reference

在GNUMakefile 中使用if-else的方式

主要是我想要針對某些build target做些條件判斷,只有當某些條件成立時,才可以繼續build target中的其他步驟,不然的話就中斷。

最基本的使用範例如下︰

build.target:
    if [ ! -d /home/ubuntu ]; then echo "ERROR: folder not exist"; exit 1; fi

# OR
build.target2:
    if [ ! -d /home/ubuntu ]; then \
        echo "ERROR: folder not exist"; \
        exit 1; \
    fi

Reference:

Mac shell上的快捷鍵

最近看到別人分享的一篇bash shell 快捷鍵對照縮圖以後,感覺可以稍微練一下,對平常工作應該會有不少幫助XD

後來找了一下網路上的資訊,看來Apple 的官方就有放快捷鍵對照表了,決定也順便整理一下我自己的版本:

動作快速鍵Notes
重新放置插入點將游標移至新插入點的同時按住 Option 鍵
將插入點移至該行起始處Control + A
將插入點移至該行結尾處Control + E
將插入點向前移動一個字元向右鍵
將插入點向後移動一個字元向左鍵
將插入點向前移動一個單字Option + 向右鍵我的iterm2這邊要用Control + 向右鍵
將插入點向後移動一個單字Option + 向左鍵我的iterm2這邊要用Control + 向左鍵
刪除行Control + U被刪除的整列會被複製
刪除至文字行結尾處Control + K
向前刪除至文字結尾處Option + D(已選取「使用 Option 鍵作為 Meta 鍵」時可使用)無法使用
刪除前面的一個文字Control + W這個文字會被複製起來
貼上Control+W 所複製的文字Control + Y
刪除一個字元Delete 鍵
調換兩個字元的位置Control + T目前選的字元會與前面的字元對調
https://support.apple.com/zh-tw/guide/terminal/trmlshtcts/mac

References:

在執行shell 指令前帶入env file中的所有環境變數

由於目前使用的應用程式設定檔是寫在env file中,且為了讓應用程式的測試是可以依據不同env file下的參數而有更彈性的執行方式,所以就有了個需求是我必須在執行測試指令前要帶入env file中的所有環境變數…

一開始的想法很簡單,通常我們可以用下面的方式來執行指令DB_ADDR=127.0.0.1 && go test ./…,那這樣應該也可以用類似source test.env && go test ./...,結果完全無法帶入env file中的資訊。

後來在網路上找了大概知道可以用下面的指令來做到

export $(cat envs/test.env | xargs); go test -p=1 ./

但這樣可能會目前的user session 中有env file的那些環境變數,不是非常乾淨…

更乾淨的作法會是把上述指令寫進Makefile中,這樣每次執行完我們的測試以後,環境變數並不會寫進目前的user session中。

e2e_test::
   export $(shell cat envs/docker-local.env | xargs); go test ./...

References:

https://stackoverflow.com/questions/19331497/set-environment-variables-from-file-of-key-value-pairs/19331521