这是我在终端运行的脚本:
for ib1 in $(seq 0 999);do ibstr=$(printf sample52-%d $ib1);calculate_rmsd --reorder Motif52.pdb ${ibstr}.pdb | awk "{printf "%d %8f\n", $ib1, $0}" >> sample52_hotspots; done
但是报错:
BrokenPipeError: [Errno 32] Broken pipe
awk: cmd. line:1: {printf %d
awk: cmd. line:1: ^ syntax error
awk: cmd. line:1: {printf %d
awk: cmd. line:1: ^ unexpected newline or end of string
请问是为什么?
这个错误可能是由于在AWK命令中的双引号未正确转义,导致它被Shell截断,引起了BrokenPipeError。为了解决这个问题,你可以在Shell脚本中使用单引号来包含AWK命令,确保AWK命令中的双引号不被Shell解释。
以下是修正后的Shell脚本:
for ib1 in $(seq 0 999); do
ibstr=$(printf sample52-%d $ib1)
calculate_rmsd --reorder Motif52.pdb ${ibstr}.pdb | awk '{printf "%d %8f\n", '$ib1', $0}' >> sample52_hotspots
done
主要的更改是将AWK命令的双引号替换为单引号,并将$ib1直接插入到Shell的命令行中,以确保Shell不会在AWK命令中截断。这应该能够解决你遇到的问题。