【问题标题】:awk: two files are queriedawk:查询两个文件
【发布时间】:2017-04-25 10:55:40
【问题描述】:

我有两个文件

file1:

>string1<TAB>Name1
>string2<TAB>Name2
>string3<TAB>Name3

file2:

>string1<TAB>sequence1
>string2<TAB>sequence2

我想使用awk 来比较各个文件的第 1 列。如果两个文件共享第 1 列值,我想打印 file1 的第 2 列,然后是 file2 的第 2 列。例如,对于上述文件,我的预期输出是:

Name1<TAB>sequence1
Name2<TAB>sequence2

这是我的代码:

awk 'BEGIN{FS=OFS="\t"} FNR == NR { a[$1] = $1; next } $1 in a { print a[$2], $2 }' file1 file2 >out

但我唯一得到的是一个空的第一列序列

这里的错误在哪里?

【问题讨论】:

  • a[$1] = $1 应该是a[$1] = $2
  • 欢迎来到 Stack Overflow。请注意,在这里说“谢谢”的首选方式是投票赞成好的问题和有用的答案(一旦你有足够的声誉这样做),并接受对你提出的任何问题最有帮助的答案(这也给出了你的声誉小幅提升)。请查看About 页面以及How do I ask questions here?What do I do when someone answers my question?

标签: bash awk


【解决方案1】:

你的任务不正确。

$ awk 'BEGIN   {FS=OFS="\t"}
       NR==FNR {a[$1]=$2; next} 
       $1 in a {print a[$1],$2}' file1 file2

Name1 sequence1
Name2 sequence2

【讨论】:

  • 是的,就是这样!虽然我需要FS=OFS,因为我的名字中有空格
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-03-04
  • 1970-01-01
  • 2013-12-23
  • 1970-01-01
  • 2012-09-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多