有一个文件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这样的文件 感谢。
答案 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
。