簡體   English   中英

使用awk將一個文件中的列替換為另一個文件中的列?

[英]Replace column in one file with column from another using awk?

我有兩個文件:

f1:
111 aaa 444
222 bbb 555
333 ccc 666

f2:
111 333 000 444
222 444 111 555
333 555 555 666

如何使用awk替換“f1”中的第二列,使用“f2”中的第三列?

嘗試:

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

輸出:

111 000 444
222 111 555
333 555 666

上述代碼的說明:

  • FNR==NR允許您一次處理一個完整的文件。 在這種情況下,它是文件f2 NRFNR都包含行號,差異是當讀取新文件時, FNR重置為1,而NR繼續遞增。
  • 雖然我們正在與f2文件中,我們正在創建的陣列稱為a使用行數( NR )作為key和第三列( $3 )作為值。 next允許我們跳過動作塊的其余部分。
  • 一旦f2文件結束,我們就開始處理f1文件了。 NR==FNR條件不會變為假,因為FNR將從1遞增而NR不會。 因此,只有第二個動作塊{$2=a[FNR]}將被處理。
  • 該塊的作用是通過查找行號將第二列值重新分配給數組值。
  • 1在最后打印線。 它返回true,並且在awk true語句會導致行的打印。
  • f2 f1是定義的文件的順序。 因為我們想要從文件f2創建一個數組,所以我們首先放置它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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