簡體   English   中英

如何基於linux中的關鍵列組合兩個文件的內容

[英]how to combine contents of two files based on key columns in linux

我有兩個文件,其中3列相同,第4列不同。

文件A

a b c 100
e f g 50
h i j 25

文件B

a b c 200
e f g 20
h i j 15

如何將文件A和文件B合並為文件C

文件C

a b c 100 200
e f g 50 20
h i j 25 15

-更新-

我使用了肯特郡喬特內提供的解決方案,但腳本的兩個輸出都具有。 (點)而不是逗號。 看起來像

  a,b,c,100.200 
  e,f,g,50.20 

這是一個awk

awk 'FNR==NR {a[$1,$2,$3]=$4;next} {print $0,a[$1,$2,$3]}' B A > C
cat C
a b c 100 200
e f g 50 20
h i j 25 15

如果他們只有一個共同的專欄,那么join可以成功。 但是讓我們使用它,然后解析輸出:

$ join <(sort f1) <(sort f2)
a b c 100 b c 200
e f g 50 f g 20
h i j 25 i j 15

這是根據第一列加入的。 現在,讓我們使用cut來獲取第5列和第6列以外的所有內容:

$ join <(sort f1) <(sort f2) | cut -d' ' -f1-4,7
a b c 100 200
e f g 50 20
h i j 25 15

請注意使用sort來對文件進行排序,因為join需要對文件進行排序才能工作。 在給出示例數據的情況下,它無需sort ,但為了保持一致性而添加了該數據。

暫無
暫無

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

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