首页 > 解决方案 > 需要有关简单格式化脚本的建议

问题描述

我是一个非常基础的 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 文件。

任何帮助都会很棒。

标签: bashscript

解决方案


推荐阅读