1

我尝试使用 MAWK,其中match()内置函数没有第三个变量值:

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

解析器.awk:

{
  Embed = $1;
  Title = $2;
  User = $3;
  Categories = $4;
  Tags = $5;
}

BEGIN {
  FS="|";
}

# Regexp without pattern matching for testing purposes
match(Embed, /191081157/) {
  Id = substr(Embed, RSTART, RLENGTH);
}

{
  print Id"\t"Title"\t"User"\t"Categories"\t"Tags;
}

预期输出:

191081157|Random title|Uploader|fun|tag1,tag2,tag3

我想在函数Id外调用变量。match()

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
4

2 回答 2

1

显而易见的答案似乎是

match($1, /9f7fde/) { var = "9f7fde"; }

但更普遍的是:

match($1, /9f7fde/) { var = substr($1, RSTART, RLENGTH); }
于 2016-11-10T22:15:35.397 回答
0

假设这条线

.....vimeo.com/191081157" frameborder="0" height="481" width="608" scrolling="no">随机标题|上传者|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 )'

\056 是点( . ) \057 是正斜杠( / ), \042 是双直引号( " )

如果它根本无法匹配,请移至下一行。否则,请使用字段分离器的功能来吞噬线路中所有不需要的部分。$1 = $1 将收集前缀和您不需要的其余 HTML 标记。

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

于 2021-02-11T21:32:55.640 回答