将shell变量替换为awk模式,看起来可以浏览文件

问题描述 投票:1回答:1

NOTE:我是bash脚本和awk命令的菜鸟-请原谅我犯的任何愚蠢错误。

我无法将shell变量替换为我的awk模式。我正在尝试浏览文件,查找文件中特定字符串的首次出现,并按顺序打印后继它的每一行,直到它碰到一个空字符串/行。

我不知道我要事先搜索的字符串,我想用那个变量代替。

当我使用直接指定的字符串(例如“

:”)运行此脚本时,它可以完美运行。我已经搜索了awk模式的工作方式以及如何替换变量。我尝试将-v标志用于awk,直接使用shell变量-无效。

funcName="<${2}>:"

awk=`awk -v FN="$funcName" '/FN/,/^$/' "$ofile"`

rfile=search.txt

echo -e "$awk" > "$rfile"

错误是什么都没打印出来。我要打印所需字符串和下一个空行之间的所有行。

shell awk command-line
1个回答
1
投票

您能不能尝试下面的步骤,因为没有明显的示例但尚未测试,因此尚未进行测试。

funcName="<${2}>:"
awk_result=$(awk -v FN="$funcName" 'index($0,FN){found=1} found; /^$/{found=""}' "$ofile")
rfile=search.txt
echo -e "$awk_result" > "$rfile"

OP尝试中解决的问题:

  1. 永远不要将变量名与二进制名称或关键字名称相同,因此将awk变量名更改为awk_result
  2. 现在不推荐使用反引号,因此请始终包装变量,以使var=$(......your commands....)中的值固定为awk_result变量。
  3. 现在让我们谈论awk代码修复,我使用了index方法,该方法检查一行中是否存在变量FN的值,然后将FLAG(变量TRUE)设置为false,直到该行为根据OP的要求为空。
© www.soinside.com 2019 - 2024. All rights reserved.