在一个键值上合并两个 tsv 文件,删除没有所有字段的列



我正在尝试合并一个公共键上的两个 TSV 列。假设文件 A 是:

a   100
b   200
c   300

文件B是:

a   "hello"
c   "my name is"

我希望输出文件看起来像:

a   100 "Hello"
c   300 "my name is"

到目前为止,我已经创建了一个如下所示的文件:

a   100 "Hello"
b   200 ""
c   300 "my name is"

我想删除多余的不需要的行,因为它没有所有字段。

这是我到目前为止的代码

 awk '
 NR==1{print "column_A","column_B","column_C"}
 FNR==NR{
          A[$1]=$2
          next 
        }
       {
            print $0,( f=$1 in A ? A[$1] : "" )
            if(f) delete A[$1]
        }
     END{
           for(i in A)
               print i,"",A[i]
        }
' OFS='t' file2 file1

有什么方法可以对此代码进行轻微修改以获得该输出?

谢谢!

使用 join 命令:

join -t$'t' file1 file2

请注意,这要求在连接字段上对输入文件进行排序。如果不是,则可以使用进程替换。

join -t$'t' <(sort -t$'t' -k1,1 file1) <(sort -t$'t' -k1,1 file2)

相关内容

  • 没有找到相关文章

最新更新