Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 比较shell脚本中两个不同文件中的两列_Linux_Bash_Shell - Fatal编程技术网

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

Linux 比较shell脚本中两个不同文件中的两列,linux,bash,shell,Linux,Bash,Shell,有一个文件1,如下所示: 21,2018042100 22,2018042101 87,2018042102 98,2018042103 文件2如下所示: 45,2018042100 86,2018042102 87,2018042103 我需要的是:文件3 2018042100,21,45 2018042101,22,0 2018042102,87,86 2018042103,98,87 在文件3的第2行

有一个文件1,如下所示:

21,2018042100  
22,2018042101  
87,2018042102  
98,2018042103    
文件2如下所示:

45,2018042100      
86,2018042102      
87,2018042103     
我需要的是:文件3

2018042100,21,45    
2018042101,22,0         
2018042102,87,86  
2018042103,98,87
在文件3的第2行中,2018042101的数据存在于文件1中,但不存在于文件2中。因此,0被插入到属于文件2的列$3中

请帮助我了解如何创建像file3这样的文件。
谢谢。

Join似乎是为解决这个问题而设计的:

join -t',' -a 1 -a 2 -j 2 file1 file2
2018042100,21,45
2018042101,22
2018042102,87,86
2018042103,98,87
除了第2行中缺少的0之外,您也可以在手册页中找到解决该问题的方法。否则,您可以使用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
另一种使用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

请注意,[$2]+0期望第一个字段值是一个与示例中类似的数字。所有其他值都将产生0。

目标是在问题中添加一些自己的代码,以至少显示您自己为解决此问题所做的研究工作。我建议查看awk。堆栈溢出不是一种代码编写服务。请出示你的密码。因为堆栈溢出对您隐藏了关闭的原因:寻求调试帮助的问题为什么这段代码不起作用?必须包括所需的行为、特定的问题或错误以及在问题本身中重现这些问题所需的最短代码。没有明确问题陈述的问题对其他读者没有用处。请参阅:。