2017-08-01 97 views
0

我有以下文件:AWK:在第一個文件搜索字符串對第二

data.txt

Estring|0006|this_is_some_random_text|more_text 
Fstring|0010|random_combination_of_characters 
Fstring|0028|again_here 

allids.txt(這裏的列由分號隔開,真正的輸入製表符分隔

Estring|0006;MAR0593 
Fstring|0002;MAR0592 
Fstring|0028;MAR1195 

請注意:data.txt:重要的是這裏的冷杉t雙「列」 = name|number

現在我想用awk要搜索的data.txt第一部分(name|number)在allids.txt和輸出的第二列(從MAR

所以我預計產出將是(再次製表符分隔):

Estring|0006|this_is_some_random_text|more_text;MAR0593 
Fstring|0010|random_combination_of_characters 
Fstring|0028|again_here;MAR1195 

我不知道現在如何搜索AWK內的第一部分保守的,剩下的應該然後就:

awk 'BEGIN{FS=OFS="\t"} FNR == NR { a[$1] = $1; next } $1 in a { print a[$0], [$1] }' data.txt allids.txt 
+1

謝謝@ hek2mgl糾正! – rororo

回答

2

我會用一組場的分隔符,就像這樣:

awk -F'[|\t;]' 'NR==FNR{a[$1"|"$2]=$0; next} 
       $1"|"$2 in a {print a[$1"|"$2]"\t"$NF}' data.txt allids.txt 

在你實時數據例如,你可以刪除;。這裏只是爲了能夠重現問題中的例子。

2

這裏是另一個awk使用不同字段分隔爲兩個文件:

awk -F ';' 'NR==FNR{a[$1]=FS $2; next} {k=$1 FS $2} 
    k in a{$0=$0 a[k]} 1' allids.txt FS='|' data.txt 

Estring|0006|this_is_some_random_text|more_text;MAR0593 
Fstring|0010|random_combination_of_characters 
Fstring|0028|again_here;MAR1195 

此命令使用;作爲FS爲allids.txt,並使用作爲| FS爲data.txt

+1

好答案!... – hek2mgl

相關問題