Linux awk的使用

目錄

  • 命令基本格式
  • NR與NF
  • 批量kill命令
  • 一個簡單的替換

awk命令的基本格式

awk '條件類型1{操作1} 條件類型2{操作2} ...' filename

awk常用選項及其含義
-F fs:指定fs作為輸入行的分隔符量承,awk命令默認分隔符為空格或制表符锐借。
-f file:從腳本中讀取awk腳本指令勺卢,以取代直接在命令行輸入指令裙犹。
-v var=val:在執(zhí)行處理過程之前尽狠,設置一個變量var晚唇,并給其設備初始值為val。

一些內置變量
NF:每一行($0)擁有的字段總數
NR:目前awk所處理的是第幾行數據
FS:目前的分隔字符盗似,默認是空格鍵

寫著寫著覺得教程夠多了哩陕,簡單分享使用吧
參考《鳥哥的Linux私房菜(第四版)》,沒書的話看看C語言中文網awk教程:http://c.biancheng.net/view/4082.html

NR與NF

awk '{print $1 "\t lines:" NR "\t columns:" NF}' test1.txt

逐行處理赫舒,打印出每行的第一個字段$1悍及,處理到第幾行NR和每行字段數NF


# test1.txt文件內容
cat test1.txt
line11  line12  line13
line21  line22  line23
line31  line32  line33

#################這是一條分割#

批量kill命令

當當前shell窗口運行的命令全部需要kill的時候(命令較多),可以批量kill

ps -ef | grep commandxxx | grep xxx(用戶) | awk '{print $2}' | while read id; do kill $id; done

# 先查看命令情況
ps -ef | grep java | grep qiuyinbin | awk '{print $2}' | while read id; do wc -l; done

# 使用示例:批量kill用戶qiuyinbin的java命令
ps -ef | grep java | grep qiuyinbin | awk '{print $2}' | while read id; do kill $id; done

# 遇到循環(huán)中的命令缺猛,要等新的命令運行時再kill缨叫,可以加個sleep
ps -ef | grep java | grep qiuyinbin | awk '{print $2}' | while read id; do kill $id;sleep 0.1; done


一個簡單的替換

首先,有兩個文件query_genename.txt和上調基因列表up.txt
文件情況如下荔燎,列之間是tab分隔

$ less -S query_genename.txt
TRINITY_DN9_c5_g1       PPP1R12A
TRINITY_DN9_c4_g1       MAD2L2
TRINITY_DN9_c2_g1       FOPNL
TRINITY_DN9_c1_g1       GGPS1
TRINITY_DN9_c10_g1      CX3CR1
TRINITY_DN9_c0_g1       STRN4
TRINITY_DN99_c4_g1      TDRD12
TRINITY_DN99_c1_g1      WDR37
TRINITY_DN99_c0_g1      ETF1
TRINITY_DN999_c4_g1     FAM92A
TRINITY_DN999_c3_g1     SGCD
TRINITY_DN999_c0_g1     OSBPL9
TRINITY_DN99998_c0_g1   SLC17A4
TRINITY_DN9997_c0_g1    DTYMK

$ less -S up.txt
query  C1_Mean C2_Mean FoldChange      log2FoldChange  FDR
TRINITY_DN2122_c0_g1    131.934049458786        24.5577242060786        5.21580462664745        2.38288983018
TRINITY_DN3132_c0_g1    144.028003992508        25.4672695470445        5.49442801032184        2.45796929925
TRINITY_DN2666_c7_g1    931.234499096598        329.255413429646        2.82325284953719        1.49735834183
TRINITY_DN623_c5_g1     2205.49752678604        677.611279019576        3.25178087581717        1.70123004338
TRINITY_DN5203_c0_g2    447.476317747716        90.9545340965873        4.88085735530767        2.28713458910
TRINITY_DN1236_c0_g1    639.880139875112        230.114971264366        2.77366637828372        1.47179426807
TRINITY_DN623_c3_g1     97.851086681933 15.4622707964198        6.03153331997378        2.5925248067555 2.259
TRINITY_DN6321_c0_g1    182.508768417987        46.3868123892595        3.87790125508826        1.95527606785

目的:使用awk將up文件中的query替換成基因名

awk -F '\t' 'NR==FNR{a[$1]=$2;next}{print a[$1]"\t"$2"\t"$3"\t"$4"\t"$5}' query-genename.txt up.txt > up_genename.txt

解釋:
NR和FNR都表示記錄數(當前處理的行數)耻姥,但是NR從1開始記錄直到所有文件讀取完,FNR則在讀取第二個文件時(這里是up.txt)有咨,從1開始重新計數琐簇。

NR==FNR時,表示讀取處理第一個文件query-genename.txt座享,對這個文件的處理代碼在后面的第一個{}內婉商,即{a[$1]=$2;next},將query-genename.txt第一列$1作為數組a的關鍵字渣叛,第二列$2作為該關鍵字對應的值丈秩。

當NR不等于FNR時(表示已經開始處理第二個文件up.txt),執(zhí)行第二個{}的代碼淳衙,即{print a[$1]"\t"$2"\t"$3"\t"$4"\t"$5}癣籽,第一列根據前面得到的數組替換為基因名挽唉,并打印2-5列,完成轉換筷狼。

$ less -S up_genename.txt
genename        C1_mean C2_Mean FoldChange      log2FoldChange  FDR
GPR68   131.934049458786        24.5577242060786        5.21580462664745        2.38288983018137        1.434
B3GALNT1        144.028003992508        25.4672695470445        5.49442801032184        2.45796929925929
ECHDC3  931.234499096598        329.255413429646        2.82325284953719        1.49735834183681        7.650
SHB     2205.49752678604        677.611279019576        3.25178087581717        1.70123004338373        1.075
SH3TC1  447.476317747716        90.9545340965873        4.88085735530767        2.28713458910152        1.082
CRYBG3  639.880139875112        230.114971264366        2.77366637828372        1.47179426807206        0.000
LPGAT1  97.851086681933 15.4622707964198        6.03153331997378        2.5925248067555 2.259213647271e-07

當有些行未轉換到時,為空值匠童,可以使用awk去除

awk -F'\t' '{if($1!="") print $0}' up_genename.txt > up_genename_fina.txt

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末埂材,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子汤求,更是在濱河造成了極大的恐慌俏险,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,640評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件扬绪,死亡現場離奇詭異竖独,居然都是意外死亡,警方通過查閱死者的電腦和手機挤牛,發(fā)現死者居然都...
    沈念sama閱讀 93,254評論 3 395
  • 文/潘曉璐 我一進店門莹痢,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人墓赴,你說我怎么就攤上這事竞膳。” “怎么了诫硕?”我有些...
    開封第一講書人閱讀 165,011評論 0 355
  • 文/不壞的土叔 我叫張陵坦辟,是天一觀的道長。 經常有香客問我章办,道長锉走,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,755評論 1 294
  • 正文 為了忘掉前任藕届,我火速辦了婚禮挪蹭,結果婚禮上,老公的妹妹穿的比我還像新娘翰舌。我一直安慰自己嚣潜,他們只是感情好,可當我...
    茶點故事閱讀 67,774評論 6 392
  • 文/花漫 我一把揭開白布椅贱。 她就那樣靜靜地躺著懂算,像睡著了一般。 火紅的嫁衣襯著肌膚如雪庇麦。 梳的紋絲不亂的頭發(fā)上计技,一...
    開封第一講書人閱讀 51,610評論 1 305
  • 那天,我揣著相機與錄音山橄,去河邊找鬼垮媒。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的睡雇。 我是一名探鬼主播萌衬,決...
    沈念sama閱讀 40,352評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼它抱!你這毒婦竟也來了秕豫?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,257評論 0 276
  • 序言:老撾萬榮一對情侶失蹤观蓄,失蹤者是張志新(化名)和其女友劉穎混移,沒想到半個月后,有當地人在樹林里發(fā)現了一具尸體侮穿,經...
    沈念sama閱讀 45,717評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡歌径,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,894評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現自己被綠了亲茅。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片回铛。...
    茶點故事閱讀 40,021評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖芯急,靈堂內的尸體忽然破棺而出勺届,到底是詐尸還是另有隱情,我是刑警寧澤娶耍,帶...
    沈念sama閱讀 35,735評論 5 346
  • 正文 年R本政府宣布免姿,位于F島的核電站,受9級特大地震影響榕酒,放射性物質發(fā)生泄漏胚膊。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,354評論 3 330
  • 文/蒙蒙 一想鹰、第九天 我趴在偏房一處隱蔽的房頂上張望紊婉。 院中可真熱鬧,春花似錦辑舷、人聲如沸喻犁。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,936評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽肢础。三九已至,卻和暖如春碌廓,著一層夾襖步出監(jiān)牢的瞬間传轰,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,054評論 1 270
  • 我被黑心中介騙來泰國打工谷婆, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留慨蛙,地道東北人辽聊。 一個月前我還...
    沈念sama閱讀 48,224評論 3 371
  • 正文 我出身青樓,卻偏偏與公主長得像期贫,于是被迫代替她去往敵國和親跟匆。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,974評論 2 355