簡體   English   中英

MAWK:將 match() 存儲在變量中

[英]MAWK: Store match() in variable

我嘗試使用 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

我想在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">隨機標題|上傳者|樂趣|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()。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM