首页 > 解决方案 > awk 命令意外换行符或字符串结尾

问题描述

我正在尝试查找此脚本中使用的 ${RESULT} 中的哪种值;

#!/bin/ksh
...
echo ${RESULT}|awk '{if ($0 ~ /RUNNING mode/) {print "STATUS=0"; print "PID="'${PID}'; print "INFO="$0; print '$PID' > "'${INSTALLDIR}/domain'/sample_pid.txt"} else {print "STATUS=1"; print "PID=-1"; print "INFO="$0} }'

可能导致此输出:

awk: cmd. line:1: {if ($0 ~ /RUNNING mode/) {print "STATUS=0"; print "PID="27708
awk: cmd. line:1:                                                              ^ unexpected newline or end of string

我尝试将许多特殊字符组合放入 ${RESULT} 中,但它从来没有问题。无论如何我可能会重写命令,但我很好奇 ${RESULT} 既可以作为教育点,也可以帮助我重现从测试系统报告给我的错误,否则我没有能够繁殖。

谢谢!

标签: awknewlineksh

解决方案


awk您的代码在如何在+ 冗余使用函数(例如print)中调用 shell 变量方面存在问题。建议保持awk代码不变awk '.........' Input_file。你可以从以下开始,但由于没有给出样品,我根本没有测试过;它完全基于OP的尝试。

此外,每当您将输出写入输出文件时,最好将输出文件名放在(output file name)

echo "$RESULT" | 
awk -v installdir="${INSTALLDIR}/domain" -v pid="$PID" -v outfile="sample_pid.txt" '
{
  if ($0 ~ /RUNNING mode/){
     print "STATUS=0\nPID=" pid "\nINFO="$0 >  (installdir"/"pid"/"outfile)
  }
  else{
     print "STATUS=1\nPID=-1\nINFO="$0
  }
}'

推荐阅读