Linux下.star格式转换脚本运行报错及输出异常问题求助
问题1:脚本语法报错+文件名末尾带问号修复
该问题是由于脚本换行符为Windows格式\r\n导致,Linux系统仅识别\n作为换行符:
- 多余的
\r字符被识别为普通文件名后缀,显示为问号 - Shell无法正常识别脚本行结束标记,触发语法错误
执行以下命令转换脚本换行格式即可:
# 若已安装dos2unix直接用 dos2unix ./script.sh # 未安装dos2unix用sed转换 sed -i 's/\r$//' ./script.sh
问题2:输出文件仅含头部无数据修复
换行格式修正后如果仍无数据,按以下步骤排查:
- 先验证目标路径是否存在.star文件,执行命令:
若提示找不到文件,将脚本内的路径替换为.star文件实际存放路径即可ls /data/CRYOSPARC/cryolo/full_data/STAR/*.star - 原脚本awk逻辑
NF>3是正确的,刚好可以跳过头部行只输出数据行,无需修改
优化后稳定版本脚本
#!/bin/bash # 写入输出文件头部 cat > ../picks.star <<EOF data_ loop_ _rlnMicrographName #1 _rlnCoordinateX #2 _rlnCoordinateY #3 EOF # 遍历提取数据 for file in /data/CRYOSPARC/cryolo/full_data/STAR/*.star; do # 跳过通配符未匹配到文件的异常情况 [ -f "$file" ] || continue # 如果需要保留文件全路径,把下面的fname替换成$file即可 fname=$(basename "$file") awk -v f="$fname" 'NF>3 {print f"\t"$1"\t"$2}' "$file" >> ../picks.star done
内容的提问来源于stack exchange,提问作者Omid
相关产品推荐
相关产品推荐

