論掌握一項腳本技術的必要性

工作過程中,我們常常需要對一些我們可能會臨時需要的數據進行清洗或者格式化等處理。這個時候就需要藉助於一些奇淫技巧或者一些工具,諸如Windows平臺下的notepad++,Mac/Linux平臺下的vim等。

最近大數據部在進行成本優化,需要對各業務使用帶寬、數據量、訪問量、以及pv、uv等各種可進行成本優化的信息進行分類統計,然後進行逐步縮減優化。期間就頻繁多次的藉助於shell腳本、Java程序以及HQL來解決了大量問題。

場景一:如何快速過濾出來包含某些內容的行?(shell)

#!/bin/bash

cat your_file_name | grep "you_need_filter_content" > result_file

是不是發現很輕鬆得到了想要的所有行,而且再也不用通過n和N進行向下/上切換,或者通過ctrl+F或者ctrl+B翻頁了。

場景二:實時調用API獲取數據並錄入MySQL。(shell)

#!/bin/bash

# 以Get請求爲例
reqUrl="yourapi"
echo "request url is : $reqUrl"

resData=$(curl $reqUrl)
echo "get data : <$resData>"

parseJson(){
  echo $1 | sed 's/.*'$2':\([^,}]*\).*/\1/'
}

# 假設返回的json數據有兩個字段,分別爲total和fail
total=$(parseJson $resData '"total"')
fail=$(parseJson $resData '"fail"')

# 對數據進行入mysql庫
insertSql="INSERT INTO your_mysql_table(total,fail) values($total, $fail)"
echo "general sql: <$insertSql>"

cnt=$(mysql -hxxxxxx -P3306 -uxxxxxx -pxxxxx your_db_name -e "$insertSql")
if($cnt>0);then
  echo 'insert record successfully!'
else
  echo 'no insert!'
fi

場景三:如何批量刪除redis中指定key數據(以set數據類型爲例)?(shell)

假設已經準備好需要刪除的redis keys of set member列表文件: wait_deleted_redis_keys

#!/bin/bash

cat wait_deleted_redis_keys | while read member_key
do
  `redis-cli -h your_redis_host -p your_redis_password srem your_redis_set_key $member_key`
  echo "success:["$member_key"]" >> result_deleted_redis_keys.log
done
echo ">>>>>>>>>>>>>>DONE<<<<<<<<<<<<<" >> result_deleted_redis_keys.log

場景四:如果沒有權限執行flushall清空redis中數據,那麼如何處理?(shell)

#!/bin/bash

redis-cli -h your_redis_host -p your_redis_password --scan --pattern "*" | xargs redis-cli -h your_redis_host -p your_redis_password del
echo ">>>>>>>>>>>>>>clear redis data DONE<<<<<<<<<<<<<"

場景五:如何實時監控某個進程的存活狀態,失敗並重新拉起?(python)

# -*- coding:UTF-8 -*-

import os

# 檢測進程是否存在
def isRunning(process_name):
    try:
        process = len(os.popen('ps aux | grep "' + process_name + '" | grep -v grep | grep -v tail | grep -v keepH5ssAlive').readlines())
        if process >= 1:

            return True
        else:
            return False
    except:
        print("Check process ERROR!!!")
        return False

# 重新拉起進程
def startProcess(process_script):
    try:
        result_code = os.system(process_script)
        if result_code == 0:
            return True
        else:
            return False
    except:
        print("Process start Error!!!")
        return False

# 服務監控入口
def monitorService(process_name):
    if isRunning(process_name) == False:
       startProcess('your_start_process_script')

以上只是通過幾個例子來說明腳本(shell/python等等)可以幫助我們快速實現各種小需求和數據處理。當然也不反對你寫Java之類程序,然後打包部署啓動再執行…

發佈了86 篇原創文章 · 獲贊 211 · 訪問量 19萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章