我编写了一个bash脚本,试图生成一个目录,该目录以运行脚本的目录中的每个文件命名。
原始directory= /home/ag肺泡/data//sims/phylip_格式
sim1.phylip
sim2.phylip要创建的目录= sim1 sim2
这些新目录的内容应该是命名新目录的原始文件的副本,以及一个名为"input“的额外文件。该文件应包含.phylip文件的名称以及以下内容:
"Name of original file"
U
5
Y
/home/agalvez/data/sims/trees/tree_nodenames.txt之后,我想在所有这些新目录中运行以下命令(顺序):
phylip dollop < input > screenout我的方法如下,但不起作用:
!/bin/bash
for f in *.phylip;
mkdir /home/agalvez/data/sims/dollop/$f;
cp $f /home/agalvez/data/sims/dollop/$f;
cd /home/agalvez/data/sims/dollop/$f;
echo "$f" | cat > input;
echo "U" | cat >> input;
echo "5" | cat >> input;
echo "Y" | cat >> input;
echo "/home/agalvez/data/sims/trees/tree_nodenames.txt" | cat >> input;
phylip dollop < input > screenout;
;done编辑:错误混乱看起来如下所示:
line 4: syntax error near unexpected token `mkdir'
line 4: ` mkdir /home/agalvez/data/sims/dollop/$f;'最后解决办法:
#!/bin/bash
for f in *.phylip;
do
mkdir /home/agalvez/data/sims/dollop/$f;
cp /home/agalvez/data/sims/phylip_format/$f /home/agalvez/data/sims/dollop/$f;
cd /home/agalvez/data/sims/dollop/$f;
echo "$f" | cat > input;
echo "U" | cat >> input;
echo "5" | cat >> input;
echo "Y" | cat >> input;
echo "/home/agalvez/data/sims/trees/tree_nodenames.txt" | cat >> input;
phylip dollop < input > screenout;
done发布于 2022-07-14 12:56:00
当前的问题是,在循环主体的开头缺少一个do;但是您需要重构这段代码,以避免硬编码目录结构等等。
第一行需要从字面上的两个字符#和!开始,这样才能成为有效的谢邦。
printf可以用这里的文档代替;我喜欢这里的printf的紧凑性。
#!/bin/bash
for f in *.phylip; do
mkdir -p dollop/"$f"
cp "$f" dollop/"$f"
cd dollop/"$f"
printf "%s\n" "$f" "U" "5" "Y" \
"/home/agalvez/data/sims/trees/tree_nodenames.txt" |
phylip dollop > screenout
done接下来,尝试使用http://shellcheck.net/来诊断shell脚本中许多常见的初学者问题。
发布于 2022-07-14 11:44:29
假设您在${HOME}文件夹中有一个名为with的目录,其中包含1.txt、2.txt、3.txt文件。你可以这样完成的。修改此代码以满足您的需要。
#! /bin/bash
working_directory="${HOME}/pingping/"
cd $working_directory
for f in *.txt
do
mkdir "${f%%.*}"
if [ -f "${f%%.*}.txt" ]
then
if [ -d "${f%%.*}" ]
then
cp ${f%%.*}.txt ${f%%.*}
echo "Done copying"
#phylip dollop < input > screenout
#echo "Succesfully ran the command
fi
else
echo "not found"
fi
donehttps://stackoverflow.com/questions/72979307
复制相似问题