![](/img/trans.png)
[英]Using Awk to replace strings in one file with strings from other file
[英]Print a column in one file while processing the other file using awk
所以我試圖理解這個使用awk
合並兩個文件的答案 ,我想出了我的解決方案以滿足我的要求。
awk 'FNR==NR{a[$1]=$2 FS $3;next} {a[$1]=$2 FS $3}{ print a[$1]}' file2 file1
我的文件如下: -
file1
和file2
內容如下: -
1 xyz pqr F -
1 abc def A -
1 abc mno G -
1 abc def A
1 xyz pqr T
我期待輸出如下: -
1 xyz pqr F - T
1 abc def A - A
基本上匹配列從1,2,3 file2
在file1
和打印追加的最后一列對內容file2
以上的結果。
所以我對解決方案的理解如下,
FNR==NR{a[$1]=$2 FS $3;next}
將在file2
處理,將數組a
的條目存儲為column2 space column3,直到file2
結束。 file1
,我可以通過執行{a[$1]=$2 FS $3}
來匹配file2
中的那些行,這將給我file1
的所有行,其列$1
的值a[$1]
與column2值$2
space column3相同價值$3
。 現在問題來了。 $0
和a[$1]
他們正在給我 按順序輸出,
1 xyz pqr F -
1 abc def A -
xyz pqr
abc def
分別。 我最關心的是因為在FNR==NR
傳遞期間我沒有從file2
捕獲最后一列,我可能沒有將值存儲在我的數組中? 或者我存儲了嗎?
使用此awk
:
awk 'NR==FNR{a[$2 FS $3]=$4; next} $2 FS $3 in a{print $0, a[$2 FS $3]}' file2 file1
你的awk
有一些問題。
file2
$4
。 但是,你還沒有存儲它。 file1
,你重新分配陣列a
具有值file1
。 (這個: a[$1]=$2 FS $3
) 正如@EdMorton所建議的那樣,一種更易讀的形式:
awk '{k=$2 FS $3} NR==FNR{a[k]=$4; next} k in a{print $0, a[k]}' file2 file1
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.