MAWK:将match()存储在变量中

MAWK:将match()存储在变量中,awk,gawk,mawk,Awk,Gawk,Mawk,我尝试在match()内置函数没有第三个变量值的情况下使用MAWK: match($1, /9f7fde/) { substr($1, RSTART, RLENGTH); } 看 当以后我想这样构造输出时,如何将此输出存储到名为var的变量中 EDIT2-完整示例: 输入文件结构: <iframe src="https://vimeo.com/191081157" frameborder="0" height="481" width="608" scrolling="no">&

我尝试在
match()
内置函数没有第三个变量值的情况下使用MAWK:

match($1, /9f7fde/) {
  substr($1, RSTART, RLENGTH);
}

当以后我想这样构造输出时,如何将此输出存储到名为
var
的变量中

EDIT2-完整示例:

输入文件结构:

<iframe src="https://vimeo.com/191081157" frameborder="0" height="481" width="608" scrolling="no"></iframe>|Random title|Uploader|fun|tag1,tag2,tag3
<iframe src="https://vimeo.com/212192268" frameborder="0" height="481" width="608" scrolling="no"></iframe>|Random title|Uploader|fun|tag1,tag2,tag3
预期产出:

191081157|Random title|Uploader|fun|tag1,tag2,tag3
我想在
match()
函数外部调用
Id
变量

MAWK版本:

mawk 1.3.4 20160930
Copyright 2008-2015,2016, Thomas E. Dickey
Copyright 1991-1996,2014, Michael D. Brennan

random-funcs:       srandom/random
regex-funcs:        internal
compiled limits:
sprintf buffer      8192
maximum-integer     2147483647

显而易见的答案似乎是

match($1, /9f7fde/) { var = "9f7fde"; }
但更普遍的是:

match($1, /9f7fde/) { var = substr($1, RSTART, RLENGTH); }
让我们说这一行

…vimeo.com/191081157“frameborder=“0”height=“481”width=“608”scrolling=“no”>随机标题| Uploader | fun | tag1、tag2、tag3

{mawk/mawk2/gawk} 'BEGIN { OFS = "";

         FS = "(^.+vimeo[\056]com[\057]|[\042] frameborder.+[\057]iframe[>])" ; 
    
     } (NF < 4) || ($2 !~ /191081157/) { next } ( $1 = $1 )'
{mawk/mawk2/gawk}开始{OFS=”“;
FS=“(^.+vimeo[\056]com[\057]|[\042]frameborder.+[\057]iframe[>])”;
}(NF<4)| |($2!~/191081157/){next}($1=$1)'
\056是点()\057是正斜杠(/),而\042是双引号(“”)

如果它甚至不能匹配,移动到下一行。否则,请使用场分离器的电源吞掉线路中所有不需要的部分。$1=$1将收集前缀和其他您不需要的HTML标记


$1=$1的赋值操作也将返回true,为其打印提供布尔求值输入。这样,您根本不需要match()或substr()。

第二个选项是workif
print var
match()函数中。但是我想在
match()
之外使用这个变量。MAWK有可能吗?(使用GAWK match()是可能的,但由于速度的原因,我尝试使用MAWK。)@lanti:我不知道你说的“内部”或“外部”match()是什么意思。Match是一个内置函数,其中的所有内容都是实现的一部分。如果您的意思是“在match()调用所保护的操作内部”,那么该变量在之后肯定是可用的,因为awk块没有作用域。如果你的意思是其他的,请用一个清晰的例子来编辑你的问题。@Lanti:在这里,它适用于gawk、mawk、nawk和busybox awk。请提供一个完整的示例。@Lanti:不,您没有提供任何代码失败的示例输入。那么预期的输出是什么?顺便说一句,我在“输入文件结构”中找不到示例搜索字符串
9f7fde
,预期输出是第一列
191081157
中唯一一行
$1
Embed
。开发regexp模式以仅返回
vimeo.com/
之后和
之前的字符串超出了此问题的范围。上面的示例甚至不适用于硬编码字符串。添加了预期输出。您正在调用match(),而不是定义match()。花括号中的代码不在match()内函数,它位于一个动作块中,如果match()函数返回true,则执行该动作块。当执行
match($1,/9f7fde/)
时,然后执行
substr($1,RSTART,RLENGTH)
只包含字符串
9f7fde
,因此这是毫无意义的。您到底想做什么?为了简化示例,这里有一个字符串,稍后将是一个正则表达式捕获组,它将从每一行的URL中准确返回这一部分。我试图尽可能地为最简单的问题提供代码le,因为这里有人的工作是对每一个与问题无关的问题进行否决投票。我只要求分享问题(我认为不起作用的部分,它)并添加闭幕标志和否决票。无论哪种方式,你都会失去控制。
{mawk/mawk2/gawk} 'BEGIN { OFS = "";

         FS = "(^.+vimeo[\056]com[\057]|[\042] frameborder.+[\057]iframe[>])" ; 
    
     } (NF < 4) || ($2 !~ /191081157/) { next } ( $1 = $1 )'