如何使用 awk 合并两个不同文件中的一列

如何使用 awk 合并两个不同文件中的一列

我有两个文件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这两个列以获得一个新文件:

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 列,当第一个文件有写入内容时,另一个文件不可能在同一行中有写入内容

我尝试在线搜索如何合并,但只找到一个文件的示例,而不是两个文件。你知道该怎么做吗?谢谢

答案1

在每个 Unix 机器上的任何 shell 中使用任何 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

相关内容