awkを使用して2つの異なるファイルの列をマージする方法

awkを使用して2つの異なるファイルの列をマージする方法

同じコードで生成された2つのファイルbla.tsv(FS = \t)とblo.tsv(FS =)があります。\t

bla.tsv:

id hub klos
3 2 bis
2 5 
4 2 bis
5 2 
8 3 
7 2 bis

blo.tsv:

id hub klos
3 2 
2 5 jus
4 2 
5 2 
8 3 jus
7 2 

klosこれら2つの列をマージして新しいファイルを取得したいと思います。

id hub klos
3 2 bis
2 5 jus
4 2 bis
5 2 
8 3 jus
7 2 bis

正確:

  1. ファイルの残りの部分はすべて同じで、klosファイル間で列のみが変更されます。

  2. これは、47列の物理ファイルのサブサンプルです。

  3. 行と列に関する限り、まったく同じファイルです。

  4. klos列の場合、最初のファイルに書き込みがあると、他のファイルの同じ行に書き込みができません。

マージする方法をオンラインで検索してみましたが、2つではなく1つのファイルの例だけが見つかりました。何をすべきか知っていますか?ありがとう

ベストアンサー1

すべてのUnixシステムのすべてのシェルでawkを使用してください。

$ awk 'BEGIN{FS=OFS="\t"} NR==FNR{klos[NR]=$3; next} $3==""{$3=klos[FNR]} 1' blo.tsv bla.tsv
id      hub     klos
3       2       bis
2       5       jus
4       2       bis
5       2
8       3       jus
7       2       bis

おすすめ記事