首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用awk获得以下结果?

如何使用awk获得以下结果?
EN

Unix & Linux用户
提问于 2018-09-13 07:35:39
回答 2查看 97关注 0票数 2

有两个文件我要提取数据:

file1.txt:

代码语言:javascript
复制
Type Number ID Element Email
Zed  21-2   9  Blade

file2.txt:

代码语言:javascript
复制
Name Order Email_Address
Ken  19    ken@gmail.com
Tom  21    tom@gmail.com
Ray  23    ray@gmail.com

如何将两个文件组合成具有以下结果的文件:

代码语言:javascript
复制
Type Number ID Element Email
Zed  21-2   9  Blade   tom@gmail.com

以下是我以前尝试过的:

代码语言:javascript
复制
awk 'NR==1{print $0;next} NR==FNR{a[$2]=$1"\t"$3"\t"$4";next} {if($2 in a){print(a[$2]"\t"$3)}}' file1.txt file2.txt

我想我不能得到结果,因为如果声明有一些问题。我怎样才能得到通缉的结果?

EN

回答 2

Unix & Linux用户

发布于 2018-09-13 07:46:01

代码语言:javascript
复制
$ awk 'BEGIN{print "Type Number ID Element Email"}NR==FNR{Arr[$2]=$NF;next}{split($2,b,"-");if(b[1] in Arr){print $0,Arr[b[1]]}}' file2.txt file1.txt
Type Number ID Element Email
Zed  21-2   9  Blade tom@gmail.com

Arr[$2]=$NF ->将电子邮件地址存储在列2 split($2,b,"-") ->拆分第二列值的数组中,并将其用于查找。

票数 1
EN

Unix & Linux用户

发布于 2018-09-13 14:43:50

代码语言:javascript
复制
awk '
  NR == FNR {email[$2] = $3; next} 
  FNR == 1 {print; next}
  {
    for (order in email)
      if ($2 ~ "^" order "\\>") {
        print $0, email[order]
        break
      } 
  }
' file2.txt file1.txt | column -t
代码语言:javascript
复制
Type  Number  ID  Element  Email
Zed   21-2    9   Blade    tom@gmail.com

该正则表达式在number字段的起始处(^)查找序号,其中包含一个单词边界(\>),以便来自file2的序号"21“与file1中的"211-1”号不匹配。

票数 0
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/468724

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档