使用 Sort 批量合并两个文件

Merge two files using Sort in batch

所以我有两个文件需要合并。文件 A 包含密钥。我不确定如何批量使用 SORT (JCL) 来执行此操作。我知道我需要使用 joinkeyifthen。有人知道解决这个问题的方法吗?

非常感谢任何帮助。

文件A:

000001EMPLOYEE ID # 1
000002EMPLOYEE ID # 2
000003EMPLOYEE ID # 3
000004EMPLOYEE ID # 4
000005EMPLOYEE ID # 5
000006EMPLOYEE ID # 6
000007EMPLOYEE ID # 7
000008EMPLOYEE ID # 8
000009EMPLOYEE ID # 9
000010EMPLOYEE ID # 10 

文件 B:

000001 John Doe
000002 Sam Maguire
000003 Jane Doe
000006 Jackson
000007 James Bond
000008 Spiderman
000019 Not an Employee
 

期望的输出:

000001 EMPLOYEE ID # 1    John Doe
000002 EMPLOYEE ID # 2    Sam Maguire
000003 EMPLOYEE ID # 3    Jane Doe
000004 EMPLOYEE ID # 4
000005 EMPLOYEE ID # 5
000006 EMPLOYEE ID # 6    Jackson
000007 EMPLOYEE ID # 7    James Bond
000008 EMPLOYEE ID # 8    Spiderman
000009 EMPLOYEE ID # 9
000010 EMPLOYEE ID # 10
000019                    Not an Employee

要在公共字段上连接两个文件中的记录,您可以使用 DFSORT JoinKeys 命令。

输入文件:empData.txt

000001EMPLOYEE ID # 1                        
000002EMPLOYEE ID # 2                        
000003EMPLOYEE ID # 3                        
000004EMPLOYEE ID # 4                        
000005EMPLOYEE ID # 5                        
000006EMPLOYEE ID # 6                        
000007EMPLOYEE ID # 7                        
000008EMPLOYEE ID # 8                        
000009EMPLOYEE ID # 9                        
000010EMPLOYEE ID # 10                       

输入文件:empNames.txt

000001 John Doe                        
000002 Sam Maguire                        
000003 Jane Doe                        
000006 Jackson                        
000007 James Bond                        
000008 Spiderman                        
000019 Not an Employee                        

输入文件:control.txt

* Employee Number in 1-6-EmpData.txt
 JOINKEYS FILE=F1,FIELDS=(1,6,A) 
* Employee Number in 1-6-EmpNames.txt
 JOINKEYS FILE=F2,FIELDS=(1,6,A) 
* Copy Name to EmpData
* Put file indicator (?) in column1
* This will be either 1,2 or B
 REFORMAT FIELDS=(?,F1:1,26,F2:1,23) 
 JOIN UNPAIRED,F1,F2
* Use Change to see if record was only in file 2
* and replace employee number from file2 in output
 OUTREC FIELDS=(1,1,CHANGE=(6,
  C'2',28,6),NOMATCH=(2,6),
  X,8,19,35,15)
 END     

输出文件:joined.txt

000001 EMPLOYEE ID # 1    John Doe       
000002 EMPLOYEE ID # 2    Sam Maguire    
000003 EMPLOYEE ID # 3    Jane Doe       
000004 EMPLOYEE ID # 4                   
000005 EMPLOYEE ID # 5                   
000006 EMPLOYEE ID # 6    Jackson        
000007 EMPLOYEE ID # 7    James Bond     
000008 EMPLOYEE ID # 8    Spiderman      
000009 EMPLOYEE ID # 9                   
000010 EMPLOYEE ID # 10                  
000019                    Not an Employee

重新格式化字段?在输出记录中放置 '1','2' 或 'B' 以指示连接记录的构建方式。如果是 '2',则记录只出现在第二个文件中,所以我们使用 CHANGE 函数从第二个文件中获取 Employee Id 并将其放入输出记录中。

命令行:

ahlsort control.txt "empData.txt,dcb=(recfm=T,lrecl=100),empNames.txt,dcb=(recfm=T,lrecl=100)" "joined.txt,dcb=(recfm=T,lrecl=200)"

已使用 AHLSORT v14r3-227 对 Windows 进行了测试,但在 Linux 的 AHLSORT 或大型机上的 DFSORT 上应该也能正常工作。