2017-04-24 79 views
0

我有两个文件AWK:两个文件查询

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 

但我唯一得到的是一个空的第一columnsequence

哪里是错误这里?

+1

'a [$ 1] = $ 1'应该是'a [$ 1] = $ 2' – karakfa

+0

欢迎使用Stack Overflow。 请注意,在这里说'谢谢'的首选方式是通过 提高投票的好问题和有用的答案(一旦你有足够的声誉这样做),并接受任何 问题最有用的答案,你问(这也给你一个小小的提升,以你的声望 )。 请参阅[关于]页面,以及[如何在此处提问 ?]和 [当有人回答我的 问题时,我该怎么办? ?](http://stackoverflow.com/help/someone-answers) –

回答

2

你的任务是不正确的。

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

Name1 sequence1 
Name2 sequence2 
+0

是的,就是这样!尽管我需要'FS = OFS',因为我的名字中有空格 – rororo