我编写了一个 bash 脚本,它搜索我的所有目录并从文件中提取我需要的一些数据。一切正常,直到我想用每个目录中都在变化的常量减去文件的第一列。代码如下所示:
#!/bin/bash
ROOT=$(pwd)
#DIRS=$(find -name "*99")
DIRS[1]=99
DIRS[2]=199
DIRS[3]=299
DIRS[4]=399
DIRS[5]=499
DIRS[6]=599
DIRS[7]=699
DIRS[8]=799
DIRS[9]=899
DIRS[10]=999
for DIR in 1 2 3 4 5 6 7 8 9 10
do
dir=${DIRS[${DIR}]}
cd $dir
CDIR=$(pwd)
if [ $CDIR = $ROOT ]; then
continue
fi
#echo $CDIR
EFERMI=$(grep "E-fermi" OUTCAR | tail -n 1 | awk '{print $3}')
echo $EFERMI
# DOS
head -n 3007 DOSCAR | tail -n 3001 > DOS
cat DOS | awk '{print $1-$EFERMI , ($2+$3)/32}' > shifted_DOS_$dir
cat DOS | awk '{print $1 , ($2+$3)/32}' > nshifted_DOS_$dir
cp shifted_DOS_$dir $ROOT"/PLOTS"
cp nshifted_DOS_$dir $ROOT"/PLOTS"
cd $ROOT
done
“awk '{print $1-$EFERMI ...” 行无法正常工作,它返回的第一列数字错误。这是一个在每次迭代中都不同的常量移位,因此它应该遵循与所提到的相同的逻辑:如何从列中减去一个常数, 但显然它无法区分 $EFERMI 值。知道如何在不转到每个目录并单独手动执行 awk 命令的情况下执行此操作吗?!
提前致谢