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