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列?
我參考了從用於比較兩個文件以下鏈接: 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列?
利用該:
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
索引而不是數組值。
你能解釋「a [$ 1] = $ 2;」步 ?我無法得到你在做什麼。但你的解決方案爲我工作。 –
@Spartacus現在清楚了嗎?它只是賦值給數組,然後再打印數組。 –
是的,非常感謝你 –