2017-02-26 72 views
0

为什么保存在阵列中的列不能被打印出来?AWK:为什么保存在阵列中的列不能被打印出来?

我有以下两个文件:

第一个文件被称为 “文件1:”

a  1 
b  2 
c  3 

第二个文件被称为 “文件2”:

1  100 
2  200 
3  300 

当我运行下面的命令:

awk 'NR==FNR{a[$1]=$2;next}{print $0 "\t" a[$1]}' file2 file1 

我只得到下面的输出(基本上我只得到文件1印):

a  1 
b  2 
c  3 

我预期的输出应该是这样的:

a 1 100 
b 2 200 
c 3 300 

我无法弄清楚为什么[$ 1]不打印出来。你能帮我吗?非常感谢!

杰夫

+0

打印出'$ 1',太:'打印$ 0 “\ t” $ 1 “\ t” 的一个[$ 1]'。 – melpomene

+0

在阅读文件1:'$ 1'具有值 “A”, “B”, “C”。但是进入'a'的键是来自file2,它们是“1”,“2”,“3”。所以'a [“a”]'是空的。 –

+0

@LarsFischer感谢您的解释。我一直认为数组a是在file2中定义的,而且键仍然是来自file2。我会记住这一点。 – JeffZheng

回答

1

你用错了钥匙,所以数组元素为空,该键

awk 'NR==FNR {a[$1]=$2; next} 
      {print $0, a[$2]}' file2 file1 

,或者如果键已经排序为你的榜样,

join -12 -21 file1 file2 -o1.1,1.2,2.2 
+0

非常感谢。你的解决方案奏效 – JeffZheng