我当前的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
非常感谢
答案 0 :(得分:0)
如果我了解您正确尝试的内容,那么
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
)。
答案 1 :(得分:0)
你真的错了。要做到目前为止你告诉我们的所有你需要的是:
$ awk -F'[:,=] *' '{print $3, $5, $7}' file
13252254 1 142
如果你想做一些额外的事情,你做这件事的方式也是错误的,因为这是做错事的错误方法。如果您想帮助做任何事情,那么您正在尝试以正确的方式行事,发布一个带有额外输入/输出和描述的新问题。