簡體   English   中英

使用AWK合並(合並)多行

[英]Combine (Merge) Multiple Row using AWK

嗨,我有一個AWK命令,它結合了兩個文件具有相同的密鑰。

awk -v OFS='\t' '
NR==1   { print $0, "Column4", "Column5"; next }
NR==FNR { a[$1]=$0; next}
$1 in a { print a[$1], $2, $3 }
' $1 $2 > $3

這是每個文件僅返回一個密鑰。 例如如下

文件1

Key    Column1  Column2  Column3  
Test1    500     400     200               
Test1    499     400     200               
Test1    499     399     200               
Test1    498     100     100               
Test2    600     200     150               
Test2    600     199     150               
Test2    599     199     100               

文件2

Test1    Good     Good                    
Test2    Good     Good

然后結果將是

Key    Column1  Column2  Column3  Column4  Column5
Test1    500     400     200       Good      Good   
Test2    600     200     150       Good      Good

但我想使所有行合並如下所示。

Key    Column1  Column2  Column3  Column4  Column5
Test1    500     400     200       Good      Good            
Test1    499     400     200       Good      Good             
Test1    499     399     200       Good      Good             
Test1    498     100     100       Good      Good             
Test2    600     200     150       Good      Good             
Test2    600     199     150       Good      Good              
Test2    599     199     100       Good      Good           

任何人都只是想使用AWK更改邏輯。 謝謝!C

我想你在找

join file1 file2

如果您堅持使用awk進行處理,那么一種好方法是以另一種方式處理文件,以便在處理主文件時准備好要添加的部分:

awk -v OFS='\t' '
  FNR == NR { a[$1] = $2 OFS $3; next }
  { $1 = $1 }
  FNR ==  1 { print $0, "Column4", "Column5" }
  FNR !=  1 { print $0, a[$1] }
  ' "$2" "$1" > "$3"

編輯:@EtanReisner建議添加{ $1 = $1 } 這樣做的目的是強制awk從字段中重建行,以使輸入數據被混合的空格分隔開來,並由OFS統一分隔(在這種情況下為tab)。 如果數據已經用制表符分隔,則沒有必要(但不會造成傷害)。

暫無
暫無

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

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