科研人員的bash腳本入門(1)
最近老公又讓我幫忙改腳本。作為一名科研人員,他工作做得很棒,可是特別不愛琢磨怎麼寫bash腳本。相信我們中的很多人都是這樣。我突然想到可以在專欄裡面寫成系列文章,即與大家分享知識,又幫助自己總結一些技巧。很多時候自己寫的一些巧妙的腳本過不了多久就會忘掉,還要從一堆文件中挖出來。
現在是全民碼農時代,做科研,不管你是直接做計算機科學相關,還是其他各種理科(比如凝聚態物理、計算數學、材料科學、機械工程、計算化學、生物物理模擬、神經科學模擬、管理學),總有一天你會用到linux系統,在cluster(計算機集群)上跑程序。這個時候你就會需要掌握一些bash腳本基礎,這樣才能快速、批量向cluster提交任務(job),或者產生輸入文件,或者進行數據分析。下圖一、二是我用的某個Cluster上的資源用量數據。這裡面有沒有你的學科呢?
由圖一可見材料科學、生物物理、神經生物學、化學、凝聚態物理、機械工程都在消耗大量的資源。圖二比較有趣:神經生物學提交的job數量遠多於其他所有的學科,而對照圖一其消耗的資源量的比例遠沒有這麼大。而材料科學job 數量不多,但是消耗資源極多。所以可以猜測:神經科學跑的大多是時間短、佔用core的數量少的小job,也許是neuron network的模擬?此外從圖中可以發現,其實CS學科消耗的計算資源並不多。
扯遠啦。回過頭來說bash腳本。本系列文章的初衷,不是linux操作入門,也就是重點不在讓你熟悉基本操作如:ls, cd; 也不在於教你怎樣使用編輯器:vim, emacs。 所有討論的基礎是假設你已經掌握了基本的bash命令行。我將主要分享一些批量進行文本編輯,提交job的經驗。所以說,主要涉及的是
- sed , awk 批量編輯文本的技巧
- regular expression
- 巧用其他一些命令 cat, tr, bc 等輔助寫腳本
- 各種實例
- 排隊系統: slurm,sge的使用入門
- 如何從stackoverflow 上搜到你想要的關於sed, awk 編輯技巧的答案
我的第一篇技術類知乎文章就先寫到這兒了。再接再厲。
推薦閱讀:
※【Bash On Windows】在 Windows Subsystem for Linux(WSL) 上運行任何桌面環境(已達可用階段)
※20.8 別名 (從新手到菜鳥的Linux教程)
※Terminal中用Excel打開特定文件
※在Bash中按Ctrl-S為什麼會失去響應?
※linux刪除根目錄後發生了什麼?