2

我正在将文件传输从 OpenVMS 服务器移动到 Unix 服务器,并且有一个 VMS 程序逐条读取该文件,定义记录长度为 320,然后从每个末尾剥离所有 ASCII 20 个字符记录。如何使用 KSH 脚本执行此操作?

我只想逐条读取文件,从每条记录中的位置 320 将所有 ascii 20 个字符剥离回有实际好字符的位置(记录的真正结尾),然后将其写入一个新文件。

提前致谢!

编辑:我在 AIX 6

4

2 回答 2

0

您可以使用 sed:

sed -i -r 's/(.{319})\x14(.*)$/\1\2/' file

此命令将读取前 319 个字符,然后是\x14(ASCII 20),然后是该行的其余部分。然后它将放回匹配组#1 和匹配组#2。这将省略\x20

-ised 的标志(内联)将保存更改的文件。

编辑:在 AIX 上试试这个 sed:

sed 's/\(.\{319\}\)'$'\x14''\(.*\)$/\1\2/' file > _temp && mv _temp file

最终解决方案:经过调查(见评论),发现文件有尾随空格(十六进制 20)而不是 ASCII 20。一旦建立,以下解决方案有效:

sed 's/ *$//' file > _temp && mv _temp file
于 2013-07-31T17:09:34.490 回答
0

克什:

while IFS= read -r line; do
    record=${line:0:320}           # the first 320 chars of the line
    echo "${record%%+(\x14)}"      # removes ascii 20 chars from end of record
done < input.file > output.file

如果我误读了您的要求,请告诉我。

于 2013-07-31T18:10:10.483 回答