咨询UNIX环境下SAS文件解压缩的代码实现及相关疑问
在UNIX环境下使用SAS解压缩文件的方法
刚好在UNIX环境下用SAS处理过文件压缩和解压缩的需求,结合你给出的压缩代码示例,给你整理几个实用的解压缩方案:
1. 直接用X命令调用UNIX系统的gunzip
gunzip是UNIX中对应gzip的解压缩命令,直接通过SAS的X语句就能调用,和你写的压缩命令逻辑一致:
/* 解压缩.gz后缀的文件,原.gz文件会被删除 */ X gunzip "/sasdata3/MI/projects/hedis_vendor/production/inovprev/data/download/M201803/Process/unprocessed/invbsca_aba18_detail_fcr_r12_with_ce_20180330_summary_detail_dongmei_march_rolling12_preview_3_31_2018_4_18_26_pm.zip.gz";
如果想保留原.gz文件,加上-k参数即可:
X gunzip -k "/sasdata3/MI/projects/hedis_vendor/production/inovprev/data/download/M201803/Process/unprocessed/invbsca_aba18_detail_fcr_r12_with_ce_20180330_summary_detail_dongmei_march_rolling12_preview_3_31_2018_4_18_26_pm.zip.gz";
2. 在DATA步中动态执行解压缩命令
如果需要批量处理文件、动态生成路径,或者要捕获命令执行结果,推荐用DATA步的SYSTEM函数:
DATA _NULL_; /* 定义目标文件路径 */ file_path = "/sasdata3/MI/projects/hedis_vendor/production/inovprev/data/download/M201803/Process/unprocessed/invbsca_aba18_detail_fcr_r12_with_ce_20180330_summary_detail_dongmei_march_rolling12_preview_3_31_2018_4_18_26_pm.zip.gz"; /* 构造解压缩命令,用quote函数处理带空格的路径 */ cmd = catx(" ", "gunzip", quote(trim(file_path))); /* 执行命令并获取返回码(0表示成功) */ rc = system(cmd); /* 输出执行结果日志 */ if rc = 0 then do; put "✅ 文件解压缩成功: " file_path; end; else do; put "❌ 文件解压缩失败,返回码: " rc; end; RUN;
这种方式的优势是可以灵活处理不同的文件路径,还能通过返回码判断操作是否成功,方便后续的错误处理。
3. 处理双层压缩的.zip.gz文件
你的目标文件是.zip.gz格式(先zip压缩再gzip压缩),需要分两步解压缩:
/* 第一步:解gzip,得到原始的.zip文件 */ X gunzip "/sasdata3/MI/projects/hedis_vendor/production/inovprev/data/download/M201803/Process/unprocessed/invbsca_aba18_detail_fcr_r12_with_ce_20180330_summary_detail_dongmei_march_rolling12_preview_3_31_2018_4_18_26_pm.zip.gz"; /* 第二步:用unzip命令解压缩zip文件 */ X unzip "/sasdata3/MI/projects/hedis_vendor/production/inovprev/data/download/M201803/Process/unprocessed/invbsca_aba18_detail_fcr_r12_with_ce_20180330_summary_detail_dongmei_march_rolling12_preview_3_31_2018_4_18_26_pm.zip";
如果不想生成中间的.zip文件,可以用管道命令直接完成双层解压缩:
X gunzip -c "/sasdata3/MI/projects/hedis_vendor/production/inovprev/data/download/M201803/Process/unprocessed/invbsca_aba18_detail_fcr_r12_with_ce_20180330_summary_detail_dongmei_march_rolling12_preview_3_31_2018_4_18_26_pm.zip.gz" | unzip -;
几个注意事项
- 确保SAS进程对目标文件有读取权限,对输出目录有写入权限,否则命令会执行失败;
- 如果文件路径包含空格,一定要用引号括起来,或者在DATA步中用
quote函数处理,避免命令解析出错; - 如果系统找不到
gunzip或unzip命令,可以用绝对路径(比如/usr/bin/gunzip),或者用X echo $PATH;检查SAS的环境变量配置。
内容的提问来源于stack exchange,提问作者Yvonne
相关产品推荐
相关产品推荐

