使用awk中的函数缩短代码
shortern code using function in 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\tVersions\tObject Type" }
{
if ( !="Update:") {
if( =="MainFullCourse:") {
gsub("oid=","",);
gsub(",","",);
gsub("ver=","",);
gsub("vers=","",);
gsub(",","",);
gsub("type=","",);
gsub(",","",);
print "\t" "\t"
}
}
}
END { print " - DONE -" }
' $detlogfile >> "./final.txt"
目前,我必须使用
手动清理$2、$3、$4
gsub("oid=","",);
gsub(",","",);
gsub("ver=","",);
gsub("vers=","",);
gsub(",","",);
gsub("type=","",);
gsub(",","",);
是否可以制作一个 strcleaner 函数,所以我可以使用
print strcleaner() "\t" strcleaner() "\t" strcleaner()
示例输入
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" }
== "MainFullCourse:" {
print strcleaner() "\t" strcleaner() "\t" strcleaner()
}
END { print " - DONE -" }
' $detlogfile >> "./final.txt"
$
不是awk中一般的变量访问(只要变量名就可以),它是访问某个字段。您可以说 num = 1
,然后 $num
将是第一个字段 (
)。
你的做法完全错了。到目前为止,要执行您告诉我们的操作,您只需要:
$ awk -F'[:,=] *' '{print , , }' file
13252254 1 142
如果你想做一些额外的事情,你做事的方式也是错误的,因为这是做任何事情的错误方式。如果你想要帮助做任何事情,你正在尝试以正确的方式做事,post 一个新问题,附加 input/output 和描述。
我当前的 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 ( !="Update:") {
if( =="MainFullCourse:") {
gsub("oid=","",);
gsub(",","",);
gsub("ver=","",);
gsub("vers=","",);
gsub(",","",);
gsub("type=","",);
gsub(",","",);
print "\t" "\t"
}
}
}
END { print " - DONE -" }
' $detlogfile >> "./final.txt"
目前,我必须使用
手动清理$2、$3、$4 gsub("oid=","",);
gsub(",","",);
gsub("ver=","",);
gsub("vers=","",);
gsub(",","",);
gsub("type=","",);
gsub(",","",);
是否可以制作一个 strcleaner 函数,所以我可以使用
print strcleaner() "\t" strcleaner() "\t" strcleaner()
示例输入
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" }
== "MainFullCourse:" {
print strcleaner() "\t" strcleaner() "\t" strcleaner()
}
END { print " - DONE -" }
' $detlogfile >> "./final.txt"
$
不是awk中一般的变量访问(只要变量名就可以),它是访问某个字段。您可以说 num = 1
,然后 $num
将是第一个字段 ()。
你的做法完全错了。到目前为止,要执行您告诉我们的操作,您只需要:
$ awk -F'[:,=] *' '{print , , }' file
13252254 1 142
如果你想做一些额外的事情,你做事的方式也是错误的,因为这是做任何事情的错误方式。如果你想要帮助做任何事情,你正在尝试以正确的方式做事,post 一个新问题,附加 input/output 和描述。