我有以下文件:
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
:重要的部分是这里的前两列"=name|number
(
现在我想用awk
在allids.txt
中搜索data.txt
的第一部分(name|number
(并输出第二列(从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
我会使用一组字段分隔符,如下所示:
awk -F'[|t;]' 'NR==FNR{a[$1"|"$2]=$0; next}
$1"|"$2 in a {print a[$1"|"$2]"t"$NF}' data.txt allids.txt
在实数据示例中,您可以删除;
。它在这里只是为了能够重现问题中的示例。
下面是另一个对两个文件使用不同字段分隔符的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
此命令使用;
作为allids.txt
的 FS,并使用|
作为data.txt
的 FS