簡體   English   中英

使用awk處理其他文件時,在一個文件中打印一列

[英]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

我的文件如下: -

file1file2內容如下: -

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 file2file1和打印追加的最后一列對內容file2以上的結果。

所以我對解決方案的理解如下,

  1. FNR==NR{a[$1]=$2 FS $3;next}將在file2處理,將數組a的條目存儲為column2 space column3,直到file2結束。
  2. 現在在file1 ,我可以通過執行{a[$1]=$2 FS $3}來匹配file2中的那些行,這將給我file1的所有行,其列$1的值a[$1]與column2值$2 space column3相同價值$3 現在問題來了。
  3. 在file1中匹配它們后,我不知道如何按預期打印值。 我試着打印$0a[$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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM