我正在将文件传输从 OpenVMS 服务器移动到 Unix 服务器,并且有一个 VMS 程序逐条读取该文件,定义记录长度为 320,然后从每个末尾剥离所有 ASCII 20 个字符记录。如何使用 KSH 脚本执行此操作?
我只想逐条读取文件,从每条记录中的位置 320 将所有 ascii 20 个字符剥离回有实际好字符的位置(记录的真正结尾),然后将其写入一个新文件。
提前致谢!
编辑:我在 AIX 6
您可以使用 sed:
sed -i -r 's/(.{319})\x14(.*)$/\1\2/' file
此命令将读取前 319 个字符,然后是\x14
(ASCII 20),然后是该行的其余部分。然后它将放回匹配组#1 和匹配组#2。这将省略\x20
。
-i
sed 的标志(内联)将保存更改的文件。
编辑:在 AIX 上试试这个 sed:
sed 's/\(.\{319\}\)'$'\x14''\(.*\)$/\1\2/' file > _temp && mv _temp file
最终解决方案:经过调查(见评论),发现文件有尾随空格(十六进制 20)而不是 ASCII 20。一旦建立,以下解决方案有效:
sed 's/ *$//' file > _temp && mv _temp file
克什:
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
如果我误读了您的要求,请告诉我。