当变量输出包含句号时出现 AWK 语法错误

AWK syntax error when the variable output has a full stop in it

提问人:Amy Houseman 提问时间:9/28/2023 更新时间:9/28/2023 访问量:52

问:

我正在尝试添加此变量(它采用批处理作业编号并从文本文件中提取 ID,其中一个 ID 是新行),以便可以将其作为变量输入到不同的位置。

我希望将此变量结果(文件 ID)添加到文件第二列的每个条目的开头。

这是 LSB 上代码的一部分(它在超级计算机上的工作方式与 slurm 略有不同):

FILE_ID=$(sed -n "{$LSB_JOBINDEX}p $IDs_file)

awk -v OFS="\t" FILE_ADD=$FILE_ID '{$2="FILE_ADD"$2'}1 $INPUTFILE > $OUTPUTFILE

但是,我收到此错误:

awk: cmd. line:1: FILE_ADD=ID123.
                                ^ syntax error

谢谢!! 艾米

bash awk 语法错误

评论

0赞 Amy Houseman 9/28/2023
哦,非常感谢!我确实尝试查找它,但其他解决方案不是很清楚 - 谢谢!艾米
0赞 Amy Houseman 9/28/2023
只需运行它 - 就会让你知道它是否有效!
1赞 Freeman 9/28/2023
@EdMorton 谢谢你,亲爱的老师。非常感谢您对我的回答的善意反馈。
1赞 Ed Morton 9/28/2023
@Freeman您的答案确实显示了 OP 尝试执行的操作的正确语法。
1赞 Ed Morton 9/28/2023
修复 shellcheck.net 告知您的问题,如果仍有问题,请发布新问题。另请阅读 mywiki.wooledge.org/Quotescorrect-bash-and-shell-script-variable-capitalization

答:

3赞 Freeman 9/28/2023 #1

该部分将变量与 awk 中的第二列 () 连接起来,末尾是打印所有修改行的速记方式$2=FILE_ADD $2FILE_ADD$21

看看这个:

FILE_ID=$(sed -n "{$LSB_JOBINDEX}p" "$IDs_file")

awk -v OFS="\t" -v FILE_ADD="$FILE_ID" '{$2=FILE_ADD $2}1' "$INPUTFILE" > "$OUTPUTFILE"

评论

1赞 Ed Morton 9/28/2023
您还可以建议增强功能,因为当您使用 awk - 时,您永远不需要 sed。我希望它可以变得更加健壮,但如果没有看到示例输入、输出和 的值,我们就无法提供帮助,它将执行当前 OP 的 sed+awk 所做的事情。awk -v lsb_idx="$LSB_JOBINDEX" -v OFS='\t' 'NR==FNR{if ($0 ~ lsb_idx) file_id=$0; next} {$2=file_id $2}' "$IDs_file" "$INPUTFILE" > "$OUTPUTFILE"LSB_JOBINDEX
1赞 Amy Houseman 9/28/2023
@Freeman您的解决方案奏效了,非常感谢!@Ed Morton,我也会研究你的解决方案,因为我相信我将来会用到它!非常感谢你们俩