我有以下文件min.conf,如下所示。我需要将路径目录更改为文件中的当前目录。
输入文件(min.conf)
#!/bin/bash
#
#SBATCH --workdir=/work/LAS/input
myNAMD2=$(which namd2)
myWork=/work/LAS/input
我有以下代码:
#!/bin/bash
filename="min.conf"
#While loop to read line by line
while IFS= read -r line; do
#If the line starts with ST then set var to yes.
if [[ $line == '#SBATCH --workdir='* ]] || [[ $line == 'myWork='* ]] ; then
fi
done < "$filename"
所需的输出量(最低配置):
#!/bin/bash
#
#SBATCH --workdir=/work/input23
myNAMD2=$(which namd2)
myWork=/work/input23
答案 0 :(得分:0)
能否请您尝试以下。这里要注意的一点是PWD
是一个shell变量,然后通过将其分配给awk
变量将其传递给awk
。
PWD=`pwd`
awk -v pwd="$PWD" '
/mywork/{
sub(/=.*/,"=" pwd)
}
/SBATCH/{
sub(/workdir=.*/,"workdir=" pwd)
}
1
' Input_file
如果要将输出保存到Input_file本身,请附加> temp && mv temp Input_file
答案 1 :(得分:0)
sed
可以做一些您想做的事情:
sed -E '/^(a|b)/s:c:d:g'
/^(a|b)/
:适用于以a
或b
开头的所有行。s:c:d:g
:将所有c
替换为d
。因此,关于将路径更改为当前路径:
sed -E '/^(#SBATCH --workdir=|myWork=)/s:=\/.*\/:='$PWD'\/:'
/^(#SBATCH --workdir=|myWork=)/
:适用于所有以#SB..
开头的行s:=\/.*\/:=\/'$PWD'\/:
:用当前工作目录替换目录名称$PWD
:在bash
中,它是您当前的工作目录; $(pwd)
也一样最后,如果要 sed
,请编辑您的 min.conf
文件:
sed -i~ -E '/^(#SBATCH --workdir=|myWork=)/s:=\/.*\/:='$PWD'\/:' min.conf
sed -i~
:编辑文件并进行备份