比较shell脚本中两个不同文件中的两列

时间:2018-04-21 17:38:58

标签: linux bash shell

有一个文件1如下:

21,2018042100  
22,2018042101  
87,2018042102  
98,2018042103    

有如下文件2:

45,2018042100      
86,2018042102      
87,2018042103     

我需要的是:(file3)

2018042100,21,45    
2018042101,22,0         
2018042102,87,86  
2018042103,98,87

在file3的第2行中,2018042101的数据存在于file1中,但在file2中不存在。因此,在$ 3列中插入0,该列属于file2。

请帮助找出如何创建像file3这样的文件 感谢。

2 个答案:

答案 0 :(得分:0)

加入似乎是为了解决这个问题:

join -t',' -a 1 -a 2 -j 2 file1 file2
2018042100,21,45
2018042101,22
2018042102,87,86
2018042103,98,87

除了缺少",0"在第2行,但也许您在该问题的联机帮助页中找到了解决方案。否则,您可以使用sed来纠正该问题。

join -t',' -a 1 -a 2 -e "0" -j 2 file1 file2  | sed -r 's/^[^,]+,[^,]+$/&,0/'
2018042100,21,45
2018042101,22,0
2018042102,87,86
2018042103,98,87

答案 1 :(得分:0)

另一个使用awk:

$ awk 'BEGIN{FS=OFS=","}NR==FNR{a[$2]=$1;next}{print $2,$1,(a[$2]+0)}' file2 file1
2018042100,21,45
2018042101,22,0
2018042102,87,86
2018042103,98,87

说明:

$ awk '
BEGIN {
    FS=OFS=","                # set field separators
}
NR==FNR {                     # process first file
    a[$2]=$1                  # hash value on date
    next                      # process next record in first file
}
{                             # process second file
    print $2,$1,(a[$2]+0)     # output date, value, value from first file if exists
}' file2 file1                # mind the file order

请注意,(a[$2]+0)期望第一个字段值是您示例中的数字。所有其他值都将生成0