awk-通过文件进行嵌套搜索?

awk-通过文件进行嵌套搜索?,awk,Awk,我有一个文件,列出了宏和宏中使用的脚本元素。如果我知道脚本的名称,我就能够逐行搜索文件并打印使用它的任何宏。太好了!非常感谢这里的帮助者。我现在遇到的问题是,我想在文件中循环,找到每个脚本并打印使用它的宏。我认为这可能是一个嵌套的for循环,首先查找每个脚本,然后测试每个宏,但还没有找到答案 每行列出一个脚本或宏 每行有1美元作为“SCR”或“MAC”进行分类 每行有$4作为一个长字符串,一个唯一的id(示例=RS1c80952b46129fc3bbf7b6d35e52f581d5d96edf

我有一个文件,列出了宏和宏中使用的脚本元素。如果我知道脚本的名称,我就能够逐行搜索文件并打印使用它的任何宏。太好了!非常感谢这里的帮助者。我现在遇到的问题是,我想在文件中循环,找到每个脚本并打印使用它的宏。我认为这可能是一个嵌套的for循环,首先查找每个脚本,然后测试每个宏,但还没有找到答案

  • 每行列出一个脚本或宏
  • 每行有1美元作为“SCR”或“MAC”进行分类
  • 每行有$4作为一个长字符串,一个唯一的id(示例=RS1c80952b46129fc3bbf7b6d35e52f581d5d96edf)
  • 每行都有$6作为脚本或宏的名称
  • 每个宏行都有$7到NF,列出了它使用的脚本id,并在前面加了下划线(示例=_RS1c80952b46129fc3bbf7b6d35e52f581d5d96edf)
这是脚本的实际示例行:

    SCR 4 0 RS1c80952b46129fc3bbf7b6d35e52f581d5d96edf "Custom: AUDIOBOOKS____ITEM_Select_on_selected_track_by_item_name____fill_1000ms.lua" /home/babag/Downloads/Reaper/ReaScripts/Scripts/BABAG/lua/AUDIOBOOKS____ITEM_Select_on_selected_track_by_item_name____fill_1000ms.lua
这是使用上述脚本的两个实际宏行:

    MAC 1 0 "fad0ff7281777ae665363b96d96f1651" "Custom: AUDIOBOOKS____REPLACE_WITH_1000ms_ROOMTONE" _BR_SAVE_CURSOR_POS_SLOT_1 _SWS_SAVETIME1 _RSdebf6a0296631b3e9ce8c88c82d5d3da56e345de _RS1c80952b46129fc3bbf7b6d35e52f581d5d96edf 40698 _SWS_UNSELONTRACKS _SWS_RESTTIME1 _RSc48877ad5413b689c4abf510e70edfb7b138002c 40310 40718 _SWS_XFDOFF 40061 40630 40006 _SWS_AWPASTE _BR_RESTORE_CURSOR_POS_SLOT_1 40630 40635 40289 _SWS_HSCROLL50  
    MAC 1 0 "9d4aa8bac6f7cb3d76c673dd2639152b" "Custom: AUDIOBOOKS____PASTE_AT_CURSOR_wRIPPLE_1000ms_ROOMTONE" _BR_SAVE_CURSOR_POS_SLOT_1 _SWS_SAVETIME1 _RSdebf6a0296631b3e9ce8c88c82d5d3da56e345de _RS1c80952b46129fc3bbf7b6d35e52f581d5d96edf 40698 _SWS_UNSELONTRACKS _SWS_RESTTIME1 _RSc48877ad5413b689c4abf510e70edfb7b138002c 40310 40718 _SWS_XFDOFF _SWS_AWPASTE _BR_RESTORE_CURSOR_POS_SLOT_1 40289  
我使用它来查找脚本行:

awk -v s='RS1c80952b46129fc3bbf7b6d35e52f581d5d96edf' '$1=="SCR"{for(i=4;i<=NF;i++) if($i==s) {print $6; next}}' inputfile.txt

在这种情况下,您需要两次解析文件:一次收集脚本,然后再次检查宏

awk'
NR==FNR{
如果($1==“SCR”)脚本[“\$4]=$6
下一个
}
$1==“MAC”{

对于(i=7;i您尚未提供任何示例数据。这意味着我们无法帮助您。请阅读有关如何创建MCVE(-或MRE或现在使用的任何名称)或SSCCE()-用不同的名称表示相同的想法。请注意,MCVE包括样本输入数据以及预期和实际输出。还要注意MCVE的“最小”部分。删除不相关的部分。谢谢,乔纳森。文件中的行通常很长,因此我认为最好尽量简洁地描述。既然你问了,我已经添加了一个实际脚本行数据的示例,以及使用它的四个宏行。不过,它似乎确实让事情变得很长。再次感谢。再次感谢您的更改。我在翻译实际文档和正确显示在Web上的内容时遇到了不少困难。请看要发布什么样的示例(你有小文本块和大文本块,我无法区分输入和输出,也不知道为什么大文本块中有这么多文本,等等),以及如何格式化(你的一些小文本块的格式正确,但你的大文本块的格式不正确)。看看这是否不清楚。谢谢,Ed。我拿出了几行示例行,它们将内容缩短了很多。如果不明显,这与我的专业领域相去甚远。我担心,在发布需要解析的文本文件中的行时,空格和其他重要内容可能会被更改,使行变得无用。这就是为什么我,一开始,我选择尝试清楚地描述问题和议题。显然,这不起作用,已经成为一种无用的努力。再次感谢。我放弃了。
awk -v s='_RS1c80952b46129fc3bbf7b6d35e52f581d5d96edf' '$1=="MAC"{for(i=7;i<=NF;i++) if($i==s) {print $6; next}}' inputfile.txt
scriptname1 is used in the following macros:  
macroname  
macroname  
macroname

scriptname2 is used in the following macros:  
macroname  
macroname  
macroname  

scriptname3 is used in the following macros:  
macroname  
macroname  
macroname