我需要在充满迭代文件的目录上运行程序(对于感兴趣的人来说是class PSerializer : JsonConverter
{
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
PItem p = value as PItem;
JObject jo = JObject.FromObject((PItem)value);
var itemProperties = typeof(PItem).GetProperties(System.Reflection.BindingFlags.Public
| System.Reflection.BindingFlags.Instance
| System.Reflection.BindingFlags.DeclaredOnly);
var excludeList = new List<string> { "type" };
var itemProps = jo.Properties().Where(x => itemProperties.Any(y => y.Name == x.Name) && !excludeList.Any(y => y == x.Name));
writer.WriteStartObject();
foreach(var itemP in itemProps)
{
writer.WritePropertyName(itemP.Name);
serializer.Serialize(writer, itemP.Value);
}
writer.WriteEndObject();
}
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
throw new NotImplementedException();
}
public override bool CanConvert(Type objectType)
{
return objectType == typeof(PItem);
}
}
class CSerializer : JsonConverter
{
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
writer.Formatting = Formatting.Indented;
//May cause performance issues but easy to write.
JObject jo = JObject.FromObject((CItem)value);
jo.Remove("codes");
jo.WriteTo(writer);
}
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
throw new NotImplementedException();
}
public override bool CanConvert(Type objectType)
{
return objectType == typeof(CItem);
}
}
脚本来遍历所需的文件,编辑所需的配置文件并运行程序。
我在循环内遇到bash
命令时遇到了麻烦,因为它们似乎没有正确扩展变量。
下面的代码;
sed
#!/bin/bash
cd /path/to/hole/dir
shopt -s nullglob
for i in /path/to/files/*.pdb;
do
echo $i
sed -i "s=coord /path/to/files/=coord ${i}=g" config_file.inp
var=${i:72}
hole < configfile.inp > hole_out_$var.txt
sed -i "s=coord ${i}=coord /path/to/files=g" config_file.inp
done
似乎并没有扩大;我知道关于此主题有一些类似的SO帖子,但是在这种情况下似乎没有任何答案。我尝试将$i
命令括在双引号或单引号中,尝试将sed
括在双引号,单引号或两个引号中,并带有或不带有括号,但是我的$i
变量是在我的配置文件中写为 $ i ,而不是它需要的扩展文件路径。
我希望以上所述是合理的。我不打算使用$i
,并且愿意采用其他方法来实现这一目标。
加上来自kasul(我已经尝试过)和kvantour(将-x设置为shebang)的注释,结果如下:
代码:
bash
这次为了清楚(/懒散),我保留了完整的文件路径
输出
set -x
cd /home/jonah/hole2
shopt -s nullglob
for i in /media/psf/Lickitung/1-PROJECTS/Trigger_Pore/_Analysis/CLUSTERS/c_align/*.pdb;
do
# echo $i
sed -i "s=coord /media/psf/Lickitung/1-PROJECTS/Trigger_Pore/_Analysis/CLUSTERS/c_align/=coord '"${i}"'=g" hole.inp
var=${i:72}
hole < hole.inp > hole_c_$var.txt
sed -i "s=coord '"${i}"'=coord /media/psf/Lickitung/1-PROJECTS/Trigger_Pore/_Analysis/CLUSTERS/c_align/=g" hole.inp
done
在它遍历所有2万个簇之前,我将其杀死了,但是
从空洞程序输出的tst10706仍然读取; 错误 无法打开pdb坐标输入文件: $ i
注意:任何想巧妙地指出20k结构的聚类分析的人都是愚蠢的,请随意,自那以后,我已修复了这种严重缺陷的方法,但是我仍然想找到代码问题以备将来使用
谢谢