linux - 使用内连接连接两个 TSV 文件

标签 linux shell join command-line awk

我有 2 个 TSV 文件:

TSV file 1:
    A      B 
  hello   0.5
  bye     0.4

TSV file 2:
 C        D
hello     1
country   5

我想根据 file1.A=file2.C 将 2 个 TSV 文件连接在一起

如何使用linux中的join函数来做到这一点?

希望得到这个:

Text     B    D
hello    0.5  1
bye      0.4  
country       5

没有得到任何输出:

join -j 1 <(sort -k1 file1.tsv) <(sort -k1 file2.tsv) 

最佳答案

有点毛茸茸的,但这里有一个使用 awk 和关联数组的解决方案。

awk 'FNR == 1 {h[length(h) + 1] = $2}
     FILENAME ~ /test1.tsv/ && FNR > 1 {t1[$1]=$2}
     FILENAME ~ /test2.tsv/ && FNR > 1 {t2[$1]=$2}
     END{print "Text\t"h[1]"\t"h[2];
         for(x in t1){print x"\t"t1[x]"\t"t2[x]}
         for(x in t2){print x"\t"t1[x]"\t"t2[x]}}' test1.tsv test2.tsv | 
  sort | uniq

关于linux - 使用内连接连接两个 TSV 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31014528/

相关文章:

linux - 增加ssh超时

linux - 使用 CLI 恢复使用 clonezilla 保存的磁盘镜像

linux - 执行shell脚本时出现"No such file or directory"错误

连接数据的 MySQL 条件

c++ - 如何制作线程本地库实例?

macos - mac-mini 上的 ubuntu : shell script to fix my screen-resolution?

shell - .zshrc 中的命令未找到

sql - SQL JOIN 查询中的重复条目

sql - 从选择查询的列数据中删除特定字符

php - 检查命令是否正在多用户 php 进程中运行