String awk中使用函数的短代码
我现在的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 -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设置为其默认值。