基于列比较连接两个文件数据

基于列比较连接两个文件数据

我有两个文件,每个文件包含时间戳和计数,如下所示

文件1.txt

   9 2016-06-22
   3 2016-06-23
   2 2016-06-24
   1 2016-06-25
   2 2016-06-26
   2 2016-06-27

文件2.txt

   3 2016-06-23
   2 2016-06-25
   5 2016-06-27

我想创建一个输出,它在两个文件中使用日期列 (col-3) 并创建一个连接输出,如下所示。

预期结果:

   9   2016-06-22
   3 3 2016-06-23
   2   2016-06-24
   1 2 2016-06-25
   2   2016-06-26
   2 5 2016-06-27

使用粘贴命令非常复杂,需要手动操作才能获得预期的输出。有人可以帮助我吗?

谢谢。

答案1

最好的解决方案是使用join命令:

join -j 2 -a 1 -e " " -o 1.1 2.1 1.2 File1.txt File2.txt

这不是更优雅的解决方案,但如果你想学习 shell 脚本,这应该可以完成工作:

while read line1; do
    file1_number=$(echo ${line1} | cut -d ' ' -f 1)
    file1_date=$(echo ${line1} | cut -d ' ' -f 2)
    line2=$(grep ${file1_date} File2.txt)
    file2_number=$(echo ${line2} | cut -d ' ' -f 1)
    if [[ -z "${file2_number}" ]]; then
        file2_number=" "
    fi
    echo ${file1_number} "${file2_number}" ${file1_date}
done < File1.txt

相关内容