Awk 无循环提取多个列

Awk 无循环提取多个列,awk,Awk,我正在编写一个awk脚本,它将获取grep的输出并将其很好地格式化为HTML表。分隔符是“:”字符;我遇到的问题是,这个字符也可以出现在文本中。因此,如果我只是分别使用$1、$2和$3作为文件名、行号和注释,那么在注释中,在第一个之后我会丢失任何东西 有没有一种方法可以说$1、$2,然后是$3..NR,而不显式地在列上循环并将它们连接在一起 以下是目前为止的脚本: ` 开始{FS=“:”OFS=“:”} {name=$1;number=$2;$1=“”;$2=“”;comment=substr(

我正在编写一个awk脚本,它将获取grep的输出并将其很好地格式化为HTML表。分隔符是“:”字符;我遇到的问题是,这个字符也可以出现在文本中。因此,如果我只是分别使用$1、$2和$3作为文件名、行号和注释,那么在注释中,在第一个之后我会丢失任何东西

有没有一种方法可以说$1、$2,然后是$3..NR,而不显式地在列上循环并将它们连接在一起

以下是目前为止的脚本:

`

开始{FS=“:”OFS=“:”}
{name=$1;number=$2;$1=“”;$2=“”;comment=substr($0,3);}

如果将awk与命令行选项
--re interval
一起使用,则可以使用
/^([^:::*:){2}/
。当您有更多字段要删除时,可读性更强。您的意思是,“如果您使用
gawk
…”是的,我的意思是
gawk
。(
awk
通常是
gawk
的符号链接)嘿,区间表达式。如果我可以从脚本中翻动特性,我会使用它们。作为CLI开关是愚蠢的。稍微修改一下:{name=$1;number=$2;comment=gensub(/^[^::*:[^:*:/,“”,“g”)}哦,好的旧regexp。这很聪明。但你们必须在一个真正的Unix系统或BSD上,因为我认为你们需要的只是gawk
BEGIN{FS=“:”;}
即使是在oawk上,为什么要设置OFS?起初我没有修改OFS,但在注释字段中,列被更改为空格。
#!/usr/bin/awk

BEGIN {
    FS=":"

    print "<html><body>"
    print "<table>"
    print "<tr><td>File name</td><td>Line number</td><td>Comment</td></tr>"
}

{
    print "<tr><td>" $1 "</td><td>" $2 "</td><td>" $3 "</td></tr>"
}
END {
    print "</table>"
    print "</body></html>"

}`
./mysql-connector-java-5.0.8/src/com/mysql/jdbc/BlobFromLocator.java:177:       // TODO: Make fetch size configurable
./mysql-connector-java-5.0.8/src/com/mysql/jdbc/CallableStatement.java:243:     // TODO Auto-generated method stub
./mysql-connector-java-5.0.8/src/com/mysql/jdbc/CallableStatement.java:836:     // TODO: Do this with less memory allocation
{ print gensub(/^[^:]*:[^:]*:/,"","g") }