有在线 awk 命令“解释器”吗?

Ité*_*442 6 command-line bash awk

首先,我不知道我应该在哪里问这个问题。如果这个地方不适合这个,请指出正确的论坛。

我正在寻找一个可以解释 awk 命令的工具。

作为参考,请查看此网站:https://regexr.com/

当您将鼠标悬停在正则表达式部分时,它会向您解释它的作用。我正在为 awk 寻找相同的功能(不需要是网站,只要我能获得信息,任何东西都可以)。

在此输入图像描述

我需要“破译”的 awk 命令示例:

  awk -F"|" 'BEGIN{OFS="|"}{if(FNR>3){for(i=1;i<=NF;i++){sub(/ +$/,"",$i);sub(/^ +/,"",$i)};if(NF!=1){print $2,$3,$4}}}'
Run Code Online (Sandbox Code Playgroud)

小智 1

正如其他人所说,为 AWK 编程语言制作一个像正则表达式语法那样的简单工具是相当困难的。也许您会发现最接近的是可以输入并运行 AWK 代码的网站,例如https://www.tutorialspoint.com/execute_awk_online.php

关于您的样品:

awk -F"|" 'BEGIN{OFS="|"}{if(FNR>3){for(i=1;i<=NF;i++){sub(/ +$/,"",$i);sub(/^ +/,"",$i)};if(NF!=1){print $2,$3,$4}}}'
Run Code Online (Sandbox Code Playgroud)

那是:

awk [a command-line option] '[some AWK code]'
Run Code Online (Sandbox Code Playgroud)

第一部分很简单——只需执行“ awk --help”(它告诉您“ -F fs”设置字段分隔符)。“一些 AWK 代码”部分更难。我建议美化它是一个很好的步骤。你应该能够做到:

gawk --pretty-print=a.awk 'BEGIN{OFS="|"}{if(FNR>3){for(i=1;i<=NF;i++){sub(/ +$/,"",$i);sub(/^ +/,"",$i)};if(NF!=1){print $2,$3,$4}}}'
Run Code Online (Sandbox Code Playgroud)

我刚刚尝试过。它只是坐在那里,即使像“ gawk --pretty-print=a.awk 'BEGIN{a=3}'”这样的更简单的东西也可以正常工作。像https://codebeautify.org/c-formatter-beautifier这样的 AC 美化器会让你非常接近,所以你的代码示例是:

BEGIN {
  OFS = "|"
}

{
  if (FNR > 3) {
    for (i = 1; i <= NF; i++) {
      sub(/ +$/, "", $i);
      sub(/^ +/, "", $i)
    };
    if (NF != 1) {
      print $2, $3, $4
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

现在应该更容易理解了。您可以更清楚地看到有两个主要块:“BEGIN”和一个未命名的块。

然后转到https://www.gnu.org/software/gawk/manual/gawk.html(或在网上搜索“awk 手册”,这可能会作为第一个命中返回),如果您刚刚得到开始时,“awk 入门”部分很有帮助。在前几段中,您将了解到每行输入文本都会执行未命名的块,并且有可选的 BEGIN 和 END 块仅运行一次。

您可能必须在该网页上使用 control-F 来查找 FNR(它告诉您当前文件中正在处理的行号)和 NF(当前行上的字段数)等信息。