提问人:Amy Houseman 提问时间:9/28/2023 更新时间:9/28/2023 访问量:52
当变量输出包含句号时出现 AWK 语法错误
AWK syntax error when the variable output has a full stop in it
问:
我正在尝试添加此变量(它采用批处理作业编号并从文本文件中提取 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
谢谢!! 艾米
答:
3赞
Freeman
9/28/2023
#1
该部分将变量与 awk 中的第二列 () 连接起来,末尾是打印所有修改行的速记方式$2=FILE_ADD $2
FILE_ADD
$2
1
看看这个:
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,我也会研究你的解决方案,因为我相信我将来会用到它!非常感谢你们俩
评论