bash - 需要有关简单格式化脚本的建议
问题描述
我是一个非常基础的 Linux 用户,没有接受过正规的计算机科学培训。我正在尝试调整一个基本脚本,将一些数据转换为不同的格式。
我有一堆文件名为 XXX 的文件。每个包含几个标题和列。带有 .star 扩展名的文件如下所示:
data_
loop_
_rlnCoordinateX #1
_rlnCoordinateY #2
_rlnClassNumber #3
_rlnAnglePsi #4
_rlnAutopickFigureOfMerit #5
1189.5 3921.0 -999 -999.0 -999.0
1552.0 3936.5 -999 -999.0 -999.0
607.0 3874.0 -999 -999.0 -999.0
...
我想将每个文件转换为另一个文件,其中包含前两个条目以及文件名。文件名应位于第一列,后跟 x 和 y(坐标)条目。
所以我的脚本看起来像这样:
echo ' ' > ../picks.star
echo 'data_' >> ../picks.star
echo ' ' >> ../picks.star
echo 'loop_' >> ../picks.star
echo '_rlnMicrographName #1' >> ../picks.star
echo '_rlnCoordinateX #2' >> ../picks.star
echo '_rlnCoordinateY #3' >> ../picks.star
for file in /data/CRYOSPARC/cryolo/full_data/STAR/*.star; do
awk -v f="$file" '{if (NF>3) printf "%s\t%s\t%s\n", f, $1, $2}' $file >> ../picks.star; done
我希望得到的是:
data_
loop_
_rlnMicrographName #1
_rlnCoordinateX #2
_rlnCoordinateY #3
filename1.star 1189.5 3921.0
filename1.star 1552.0 3936.5
...
...
...
filename2.star 1234.3 1234.5
等等。我有两个无法解决的问题。当我运行脚本时,我得到了这个:
./script.sh: line 10: syntax error: unexpected end of file
其次,我得到一个名为 picks.star 的输出?(不知道为什么会有一个 ? 标记)并且文件看起来基本上是空的:
data_
loop_
_rlnMicrographName #1
_rlnCoordinateX #2
_rlnCoordinateY #3
我最好的猜测是“for file”部分没有正确读取 *.star 文件。
任何帮助都会很棒。
解决方案
推荐阅读
- docker - 无法使用 `docker attach SSH 到 Docker 实例
` - java - 无法覆盖 Java Kinesis Consumer 的 DynamoDB 终端节点
- android-studio - 多个 Cardview 不会出现在片段中
- c# - 在 Azure 函数中调用 Azure DevOps REST API
- mysql - 使用条件在 Mysql 中查找不同的行
- docker - 在 GitLab CI 中使用 Keycloak
- agora.io - 配置 Agora 服务器以将流发送到缩放服务器,以便缩放客户端可以加入?
- ios - 无法使用 MLKit 从图像中检测 QRCode
- linux - `mv somedir/* someotherdir` 当 somedir 为空时
- discord - 静音每个频道 discord.js 中的角色