2015-12-16 38 views
0

下面是我的兩個文件的內容兩個文件給出了意想不到的輸出:AWK比較交換的參數文件的位置時

貓F1

9 
5 
3 

貓F2

1 
2 
3 

這是我的代碼,它完美地工作,並根據我的理解給出輸出:

awk 'NR==FNR {a[$0]; next} FNR in a' f1 f2 
3 

但是,當我交換這兩個參數文件的位置時,輸出與我所期望的不同。

awk 'NR==FNR {a[$0]; next} FNR in a' f2 f1 
9 
5 
3 

我所期望的輸出3再像以前,因爲F2和F1都恰有3線和鍵3然而,存儲在散列圖。請解釋第二代碼的工作原理。

+0

學習如何通過添加諸如'print「#dbg:FNR =」FNR「\ t $ 0 =」$ 0「之類的命令來調試代碼。等祝你好運。 – shellter

回答

1

第二個例子的輸出當然是正確的。

由於f2包含值1,2,3,陣列a具有元素a[1]a[2],和a[3]結束。當它正在處理f1時,第1行有FNR == 1,而1a中的索引,所以第1行(包含9)被打印;對於第2行和第3行也是如此,因此您看到的是輸出。