String awk中使用函数的短代码

String awk中使用函数的短代码,string,function,replace,awk,String,Function,Replace,Awk,我现在的awk代码是这样的 awk -F" " ' function strcleaner(string) { gsub("oid=","",$string); gsub("ver=","",$string); gsub("vers=","",$string); gsub("type=","",$string); gsub(",","",$string); return $string; } BEGIN { print "OID\tVe

我现在的awk代码是这样的

awk -F" " '
function strcleaner(string)
{    
    gsub("oid=","",$string);
    gsub("ver=","",$string);
    gsub("vers=","",$string);
    gsub("type=","",$string);
    gsub(",","",$string);
    return $string;
}
BEGIN   { print "OID\tVersions\tObject Type" } 
    {           
        if ($1 !="Update:") {
            if($1 =="MainFullCourse:") {    
            gsub("oid=","",$2);
            gsub(",","",$2);
            gsub("ver=","",$3);
            gsub("vers=","",$3);
            gsub(",","",$3);
            gsub("type=","",$4);
            gsub(",","",$4);
            print $2 "\t" $3 "\t" $4
            }               
        }
    }
END     { print " - DONE -" } 
' $detlogfile >> "./final.txt"
目前,我必须使用手动清理$2、$3、$4

            gsub("oid=","",$2);
            gsub(",","",$2);
            gsub("ver=","",$3);
            gsub("vers=","",$3);
            gsub(",","",$3);
            gsub("type=","",$4);
            gsub(",","",$4);
有没有可能制作一个strcleaner函数,这样我就可以使用

print strcleaner($2) "\t" strcleaner($3) "\t" strcleaner($4)
样本输入

MainFullCourse: oid=13252254, vers=1, type=142, size=186
预期产量

13252251 1 142

非常感谢

如果我正确理解您的尝试,那么

awk -F" " '
  function strcleaner(string)
  {    
      # No $s here.
      gsub("oid=","",string);
      gsub("ver=","",string);
      gsub("vers=","",string);
      gsub("type=","",string);
      gsub(",","",string);
      return string;
  }
  BEGIN   { print "OID\tVersions\tObject Type" } 
  $1 == "MainFullCourse:" {           
    print strcleaner($2) "\t" strcleaner($3) "\t" strcleaner($4)
  }               
  END     { print " - DONE -" } 
  ' $detlogfile >> "./final.txt"

$
不是用于awk中的常规变量访问(仅变量名就足够了),而是用于访问特定字段。你可以说
num=1
,然后
$num
将是第一个字段(
$1
)。

你完全错了。按照您目前告诉我们的操作,您只需要:

$ awk -F'[:,=] *' '{print $3, $5, $7}' file
13252254 1 142

如果你想做一些额外的事情,你做的方式也是错误的,因为这是做任何事情的错误方式。如果您想帮助您以正确的方式完成任何事情,请发布一个新问题,并附上额外的输入/输出和说明。

您能提供示例输入和预期输出吗?更新我的问题并给出我的输入和预期输出。示例输入似乎与
gsub
调用中的模式并不匹配。任何地方都没有
oid=
ver=
vers=
type=
。哎呀,我的坏消息。应该是“MainFullCourse:oid=13252254,vers=1,type=142,size=186”gsub()的第一个参数是RE,而不是字符串,因此使用字符串分隔符充其量是误导性的,如果您真的想删除多个REs,您只需使用1个gsub()即可,数量不多,例如
gsub(/(oid | vers?| type)=|,/,“”,string)
。但这些都不是必需的,也没有显式地将FS设置为其默认值。