awk實現(xiàn)excel vlookup

Code

之前一直用vlookup做垂直查找,直到后來接觸了測序數(shù)據(jù)...動輒一個excel幾十兆灰粮,丐版的MBPvlookup經(jīng)常就卡死了忍坷;后來用R的left_join,但還是感覺不方便佩研,先要讀進去,還要保證colname一致...最后忍不了了嘉抒,直接一頓尋找袍暴,找到了用awk直接對倆文件進行vlookup。
代碼如下:

shawnwx@bogon tep$  awk 'NR==FNR{a[$1]=$0;next}NR>FNR{if($1 in a)print $0"\t"a[$1]}' file_query file_source >output.xls

可以寫成awk script然后alias重命名岗宣,當(dāng)然也可以添加到環(huán)境變量淋样。

# 新建一個awk script
vim vlookup.awk 
# 按I進入編輯模式,把下面代碼粘貼進去趁猴。然后按ESC,按: wq.
NR==FNR{a[$1]=$0;next}NR>FNR{if($1 in a)print $0"\t"a[$1]}
# 重命名成一個簡短的vlkup
alias vlkup="awk -f vlookup.awk"
# 現(xiàn)在就可以直接使用vlkup
vlkup file_query file_source > output.xls
# 寫入環(huán)境變量(mac),一般會把常用的腳本放到一個專門的路徑下娱挨,比如我的在~/aliascode
open ~/.bash_profile
# 將下面代碼寫入保存
alias vlkup="awk -f ~/aliascode/vlookup.awk"
source ~/.bash_profile
# =====================done======================

解讀

在awk里捕犬,NR和FNR的含義相近,唯一的區(qū)別就是作用范圍柴钻,NR是所有讀取的行信息計數(shù)垢粮,而FNR是正在讀取文件的行信息技術(shù),F(xiàn)NR在文件切換時會從0重新開始計數(shù)蜡吧,所以上述語句的意思是:

NR==FNR在判斷是不是在讀a.txt,如果是a.txt則以第一個數(shù)據(jù)項為key绍些,以整行信息為數(shù)據(jù)組成數(shù)組耀鸦;
NR>FNR則判斷是不是在讀b.txt,因為此時NR=(a.txt的總行數(shù)+FNR)氮帐,如果是洛姑,則判斷第一個數(shù)據(jù)項在不在a.txt數(shù)據(jù)組成的數(shù)組里,如果在楞艾,則打印本行加數(shù)組項龄广。

例子:

o@t /tmp $ cat a.txt
1 abc
2 def
3 ghi
4 jlm

o@t /tmp $ cat b.txt
3 shit
1 rubb

o@t /tmp $ awk 'NR==FNR{a[$1]=$0;next}NR>FNR{if($1 in a)print $0"\n"a[$1]}' a.txt b.txt
3 shit

Reference:

百度知道

補充

當(dāng)時用這個時候最后還返回了A的择同?第一列净宵,其實沒有這個必要,最后改了一下

NR==FNR{a[$1]=$0;next}NR>FNR{if($1 in a)print $0}

直接print出找到的择葡。因為有一次出來居然換行了,我這里是Tab分割的阻星,也木有用換行符呀虹曙。看來還是要深入學(xué)習(xí)一下

March 7, 2019補充

今天要合數(shù)據(jù)酝碳,想著批量做vlk疏哗,但發(fā)現(xiàn)之前寫的這個并不合適,因為之前只返回找到的值返奉,對沒有匹配的值實際上想返回NA所以重新寫了如下:

NR==FNR{a[$1]=$0;next}NR>FNR{if($1 in a)print a[$0]; else print $1"\t""NA""\t""NA""\t""NA"}
# 前面如何判斷就不說了,就說后面返回雷逆,$1在a里面污尉,則打印a這一樣,如果不在則返回$1\tNA\tNA\tNA 使用方法還是和之前一樣
# awk -f vlkupV1.awk data.file ID.file >output.file,然后又做了個叫vlk的快捷命令
alias vlk="awk -f ~/aliascode/vlkupV1.awk"
vim ~/.bashrc
# vlookup for return in "NA" for "else" condition
alias vlk="awk -f ~/aliascode/vlkupV1.awk"
:wq

后面應(yīng)該還會有補充....不斷完善匯中慢慢學(xué)習(xí)..

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末某宪,一起剝皮案震驚了整個濱河市锐朴,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌衣迷,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,104評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件滴肿,死亡現(xiàn)場離奇詭異佃迄,居然都是意外死亡贵少,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,816評論 3 399
  • 文/潘曉璐 我一進店門普碎,熙熙樓的掌柜王于貴愁眉苦臉地迎上來录平,“玉大人,你說我怎么就攤上這事斗这。” “怎么了赁咙?”我有些...
    開封第一講書人閱讀 168,697評論 0 360
  • 文/不壞的土叔 我叫張陵彼水,是天一觀的道長极舔。 經(jīng)常有香客問我凤覆,道長拆魏,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,836評論 1 298
  • 正文 為了忘掉前任俺附,我火速辦了婚禮事镣,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘璃哟。我一直安慰自己,他們只是感情好阳似,可當(dāng)我...
    茶點故事閱讀 68,851評論 6 397
  • 文/花漫 我一把揭開白布铐伴。 她就那樣靜靜地躺著,像睡著了一般畜吊。 火紅的嫁衣襯著肌膚如雪户矢。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,441評論 1 310
  • 那天捌年,我揣著相機與錄音挂洛,去河邊找鬼。 笑死抹锄,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的获高。 我是一名探鬼主播吻育,決...
    沈念sama閱讀 40,992評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼摊趾!你這毒婦竟也來了游两?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,899評論 0 276
  • 序言:老撾萬榮一對情侶失蹤肛炮,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后侨糟,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,457評論 1 318
  • 正文 獨居荒郊野嶺守林人離奇死亡不同,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,529評論 3 341
  • 正文 我和宋清朗相戀三年二拐,在試婚紗的時候發(fā)現(xiàn)自己被綠了汰具。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片菱魔。...
    茶點故事閱讀 40,664評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖聚蝶,靈堂內(nèi)的尸體忽然破棺而出藻治,到底是詐尸還是另有隱情,我是刑警寧澤桩卵,帶...
    沈念sama閱讀 36,346評論 5 350
  • 正文 年R本政府宣布,位于F島的核電站胜嗓,受9級特大地震影響钩乍,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜寥粹,卻給世界環(huán)境...
    茶點故事閱讀 42,025評論 3 334
  • 文/蒙蒙 一涝涤、第九天 我趴在偏房一處隱蔽的房頂上張望媚狰。 院中可真熱鬧阔拳,春花似錦、人聲如沸裳瘪。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,511評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽派殷。三九已至,卻和暖如春毡惜,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背经伙。 一陣腳步聲響...
    開封第一講書人閱讀 33,611評論 1 272
  • 我被黑心中介騙來泰國打工帕膜, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人垮刹。 一個月前我還...
    沈念sama閱讀 49,081評論 3 377
  • 正文 我出身青樓荒典,卻偏偏與公主長得像,于是被迫代替她去往敵國和親寺董。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,675評論 2 359

推薦閱讀更多精彩內(nèi)容

  • 1、Nginx日志分析日志格式:'$remote_addr - $remote_user [$time_local...
    運維前線閱讀 728評論 0 4
  • 原文:http://521cto.blog.51cto.com/950229/945683 利用awk自身變量NR...
    ibadplum閱讀 1,814評論 0 2
  • 轉(zhuǎn)載 原文的排版和內(nèi)容都更加友好,并且詳細,我只是在這里貼出了一部分留作自己以后參考和學(xué)習(xí),如希望更詳細了解AWK...
    XKirk閱讀 3,222評論 2 25
  • 本章主要學(xué)習(xí)內(nèi)容awk介紹 ?awk基本用法 ?awk變量 ?awk格式化 ?awk操作符 ?awk條件判斷 ?a...
    楠人幫閱讀 1,273評論 0 8
  • awk: grep,sed,awk grep:文本過濾 sed:文本編輯 awk:文本格式化工具; 1 什么是aw...
    木林森閱讀 1,790評論 0 16