使用 Sort 批量合并两个文件
Merge two files using Sort in batch
所以我有两个文件需要合并。文件 A 包含密钥。我不确定如何批量使用 SORT
(JCL) 来执行此操作。我知道我需要使用 joinkey 或 ifthen。有人知道解决这个问题的方法吗?
非常感谢任何帮助。
文件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 上应该也能正常工作。
所以我有两个文件需要合并。文件 A 包含密钥。我不确定如何批量使用 SORT
(JCL) 来执行此操作。我知道我需要使用 joinkey 或 ifthen。有人知道解决这个问题的方法吗?
非常感谢任何帮助。
文件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 上应该也能正常工作。