如何从 unix sed 命令读取大型机文件?
Posted
技术标签:
【中文标题】如何从 unix sed 命令读取大型机文件?【英文标题】:How to read mainframe file from unix sed command? 【发布时间】:2018-11-08 15:43:11 【问题描述】:我正在尝试通过“sed”读取大型机文件,但它无法读取。 该脚本是从大型机 JCL 调用的,因此它内置了 tcsh。
sed -n '1,10p' mainframeFile
不会产生任何东西,因为它无法读取。
【问题讨论】:
你能解释一下“大型机文件”是什么意思吗? 是的,它是一个 MVS 文件。 只要确保它是一个文本文件而不是二进制文件(低值)。需要用空格替换点。 好吧,我们尝试了'cat MFFile | sed' 命令,但它没有产生任何输出,只是发现正在读取的文件有一些格式问题,我相信点而不是空格。修复文件本身后,该命令起作用了。 'sed' 命令也适用于文本文件,但不适用于二进制文件。低值必须用空格代替。谢谢大家的建议。 【参考方案1】:当您提到大型机文件时,我假设您指的是 MVS 文件而不是 USS 文件,因为 USS 文件是为 sed
指定的,就像任何其他文件一样。
sed
不能直接使用,您可以使用此 hack 通过使用 cat
并将其泵送到标准输出和管道来使其工作。阅读下文,了解有关 MVS 数据集和命令行实用程序的更多信息。它还提供了有关如何在 USS 命令中指定 MVS 数据集的参考,例如 cat
。
我在本地系统上试过这个,它与这个 sed
命令一起工作。
cat "//'USER1.TEST.CNTL(JOBCARD)'"
// JOB (CCCCCCCC),'HOGSTROM', // MSGLEVEL=(1,1), // MSGCLASS=O, // 类=A, // 通知=&SYSUID
cat "//'USER1.TEST.CNTL(JOBCARD)'" | sed 's/JOB/BOB/'
// BOB (CCCCCCCC),'HOGSTROM', // MSGLEVEL=(1,1), // MSGCLASS=O, // 类=A, // 通知=&SYSUID
为什么不在sed
?
在命令行上支持 MVS 文件名的实用程序有限。这个article from IBM 概述了支持的实用程序。
很遗憾,sed 不在列表中
以下实用程序支持使用 MVS™ 文件名。
请参阅每个实用程序的说明以了解限制和例外情况: - 自动挂载 - c89 - cp - MV - 人 - tar不支持使用 DSNTYPE=LARGE 定义的 MVS 数据集。
本节讨论访问MVS files in USS
【讨论】:
话虽如此,您始终可以将该文件复制到一个临时文件并对其执行任何操作,然后将新文件复制回来 当你评论时我正在试验...我最初尝试将cp
发送到标准输出,然后尝试cat
有效...我们需要 Linux 系统服务
老实说,我发现在使用 JZ/OS 库的 JAVA 批处理中这很容易。这可能不是最好的方法,但我发现它肯定是最简单的
Dovetailed Technologies Co:Z Dataset Pipes 是将“经典”MVS 数据集路由到 z/Unix 实用程序的另一种有用机制。
好吧,我们尝试了'cat MFFile | sed' 命令,但它没有产生任何输出,只是发现正在读取的文件有一些格式问题,我相信点而不是空格。修复文件本身后,该命令起作用了。 'sed' 命令也适用于文本文件,但不适用于二进制文件。低值必须用空格代替。谢谢大家的建议。以上是关于如何从 unix sed 命令读取大型机文件?的主要内容,如果未能解决你的问题,请参考以下文章