2017-03-06 139 views
0

我參考了從用於比較兩個文件以下鏈接: Compare files with awk比較兩個大文件使用awk

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

它打印文件2的第2列,如果文件2月1日列文件1中。

但我的要求有點不同。如果在關聯數組中找到file2的第1列(用file1的第1列構建),如何打印file1的第2列?

回答

1

利用該:

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

採用這種方式分配一個值,以陣列a的每個數組元素。 對於字段爲foo bar的行,您實際上創建了a[foo]=bar
如果以後發出命令{print a[foo]}它將打印條(它賦值)

以前{a[$1];next}創建了名稱a和索引$1數組,但值爲null;它是a[$1]="".

stortcut整個事情在awk中工作,因爲awk有一個簡單的方法來使用$1 in a{print something}來查找數組中的索引。這是一個awk if then快捷方式。 與{if ($1 in a) {print something}}相同。關於這一點的好處是,$1 in a部分引用了數組a索引而不是數組值。

+0

你能解釋「a [$ 1] = $ 2;」步 ?我無法得到你在做什麼。但你的解決方案爲我工作。 –

+0

@Spartacus現在清楚了嗎?它只是賦值給數組,然後再打印數組。 –

+0

是的,非常感謝你 –