awk引号转义问题

这是我在终端运行的脚本:
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命令中截断。这应该能够解决你遇到的问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值