2017-03-01 70 views
2

我是新來的awk,一般殼相結合,一排。我要處理一些文件,並找到基於列awk中找到兩個文件的公共行,行中的第三個文件

兩個文件共同的行,並從文件1寫行的組合和文件2行作爲在文件3連勝。

我在網上查很多提出的解決方案,這給我帶來了得到以下結果。 我使用的文件結構和命令如下。

file1.tab

name level regno dept sex 
john 900  123  csc  male 
debby 800  378  mth  male 
ken  800  234  csc  male 
sol  700  923  mth  female 
dare 900  273  phy  male 
olanna 800  283  csc  female 
olumba 400  245  phy  male 
petrus 800  284  mth  female 

file2.tab

regno grade 
234  A 
283  D 
123  A 
273  B 

我能得到file3.tab與此命令

awk 'NR==FNR{a[$1];next} $3 in a {print $0}' file2.tab file1.tab > file3.tab 

file3.tab

name level regno dept sex 
john 900  123  csc  male 
ken 800  234  csc  male 
dare  900  273  phy  male 
olanna  800  283  csc  female 

但我要的是文件1排與排file2的整個連接到它這樣

name level regno dept sex regno grade 
john 900  123  csc  male 123 A 
ken 800  234  csc  male 234 A 
dare  900  273  phy  male 273 B 
olanna  800  283  csc  female 283 D 

其次,我也希望得到file3.tab這種格式

name level regno dept sex grade 
john 900  123  csc  male A 
debby 800  378  mth  male NA 
ken  800  234  csc  male A 
sol  700  923  mth  female NA 
dare 900  273  phy  male B 
olanna 800  283  csc  female D 
olumba 400  245  phy  male NA 
petrus 800  284  mth  female NA 

我用此命令

awk 'FNR==NR{a[$1]=$1;next}{print $0, "\t" (($3 in a)? a[$1]:"NA")}' file2.tab file1.tab > file3-2.tab 

但我得到的是這一點,從file2.tab成績沒有顯示

name level regno dept sex 
john 900  123  csc  male 
debby 800  378  mth  male NA 
ken  800  234  csc  male 
sol  700  923  mth  female NA 
dare 900  273  phy  male 
olanna 800  283  csc  female 
olumba 400  245  phy  male NA 
petrus 800  284  mth  female NA 

所有文件都製表符分隔。 請幫我解決這些問題。

回答

2

您可以使用此awk命令來實現你的輸出:

awk 'BEGIN{FS=OFS="\t"} NR==FNR{a[$1]=$2;next} { 
    print $0, ($3 in a ? a[$3] : "NA")}' file2.tab file1.tab 

name level regno dept sex  grade 
john 900 123 csc male A 
debby 800 378 mth male NA 
ken  800 234 csc male A 
sol  700 923 mth female NA 
dare 900 273 phy male B 
olanna 800 283 csc female D 
olumba 400 245 phy male NA 
petrus 800 284 mth female NA 
+0

謝謝anubhava的快速反應。我嘗試了命令,但所有的級柱爲「NA」 – CEPHAS

+0

名水平REGNO部門性NA 約翰900 123 CSC男性NA 黛比800 378第m個男性NA 縣800 234 CSC男性NA 溶膠700 923第m個女NA 敢900 273 phy男性不適用 olanna 800 283 csc女性不適用 olumba 400 245 phy男性不適用 petrus 800 284月女性不適用 – CEPHAS

+0

答案中顯示的輸出是預期輸出之一。但是當我運行命令時,我得到的輸出與您在答案中顯示的輸出不一樣。所有成績列條目均爲「NA」 – CEPHAS

相關問題