在shellscript中基于时间戳合并2个排序的文件(具有相似内容)

时间:2018-10-04 04:57:53

标签: shell awk sed

我有2个相同的文件,内容如下:

文件1:

1,Abhi,Ban,20180921T09:09:01,EmpId1,SalaryX
4,Bbhi,Dan,20180922T09:09:03,EmpId2,SalaryY
7,Cbhi,Ean,20180923T09:09:05,EmpId3,SalaryZ
9,Dbhi,Fan,20180924T09:09:09,EmpId4,SalaryQ

文件2:

11,Ebhi,Gan,20180922T09:09:02,EmpId5,SalaryA
12,Fbhi,Han,20180923T09:09:04,EmpId6,SalaryB
3,Gbhi,Ian,20180924T09:09:06,EmpId7,SalaryC
5,Hbhi,Jan,20180925T09:09:08,EmpId8,SalaryD

我想将File1的所有内容附加到文件中(基于日期升序)

结果:

1,Abhi,Ban,20180921T09:09:01,EmpId1,SalaryX
11,Ebhi,Gan,20180922T09:09:02,EmpId5,SalaryA
4,Bbhi,Dan,20180922T09:09:03,EmpId2,SalaryY
12,Fbhi,Han,20180923T09:09:04,EmpId6,SalaryB
7,Cbhi,Ean,20180923T09:09:05,EmpId3,SalaryZ
3,Gbhi,Ian,20180924T09:09:06,EmpId7,SalaryC
9,Dbhi,Fan,20180924T09:09:09,EmpId4,SalaryQ
5,Hbhi,Jan,20180925T09:09:08,EmpId8,SalaryD

2 个答案:

答案 0 :(得分:2)

您可以使用下面的AWK构造来做到这一点:-

awk -F "," 'NR==FNR{print $4, $0;next} NR>FNR{print $4, $0;}' f1.txt f2.txt | sort | awk '{print $2}'

说明:-

两个文件每行($4)之前的前缀日期列($0)。

sort。然后print $2这是整行。

这些打印的行将按日期排序。

f1.txtf2.txt是两个文件名。

答案 1 :(得分:0)

您可以尝试以下命令

awk 'FNR==NR{a[FNR]=$0;next}{print a[FNR]"\n"$0}' file1 file2

使用数组存储file1的数据,FNRa的密钥。