awk 在函数中怎么传参数

2025-05-22 06:13:55
推荐回答(3个)
回答(1):

A.字符串函数:
1.sub和gsub函数:
sub函数在记录中查找能够匹配正则表达式的最长且最靠左的字串,然后用替换子串替换找到的子串。默认是整个记录,可指定目标字符串。
sub(regualr expression,substitution string);
sub(regualr expression,substitution string,target string);
eg: awk '{sub(/Mac/,"MacIntosh"); print}' filename
awk '{sub(/Mac/,"macIntosh",$1);print}' filename
gsub类似于sub的用法,但是sub只对目标串中出现的第一个匹配进行替换。gsub则对字符串中的正则表达式进行全局替换,即替换出现在目标串的每一次匹配成功的子串。
2.index函数:index函数返回子串在字符串中的第一次出现的位置。从1开始算起。
index(string,substring)
eg: awk '{print index{hollow","low")}' filename;

3.lenght函数:这个函数常用,返回字符串的字符个数,支持中文字符
length(string) ; eg: awk 'BEGIN{print length("helloworld")}'

4.substr函数:该函数返回从字符串指定位置开始的一个子串(从1开始算起)。如果指定了子串的长度,则返回字符串相应的部分。如果指定长度超出极限,则返回实际内容。
substr(string ,starting position);
sbustr(string,starting position,length fo substring);
eg: awk 'BEGIN{print substr("Santa Claus",7,6)}'

5.match函数:该函数用于返回正则表达式在字符串中出现的位置,如果没有出现,则返回0.内置变量RSTART保存开始位置,RLEGNTH保存匹配到的长度。
match(string,regular expression)
eg: awk 'BEGIN{start=match("good morning everyone",/n... e/); print

回答(2):

awk里面的$数字得不到值
首先,得问问,你这个 $数字 是函数的参数,还是表示awk分割后的某个字段?

如果是表示函数的参数,那么这样:
就比如这个吧,
mydir=`ls -al $1"/"$file | awk '{ if ( ( $3==$OWN) && ($8==".") ) print $8}'`
假定你这里的 $3 表示函数的第三个参数,$OWN 也是 shell 的变量,而不是在awk中定义的,那么改为:
mydir=`ls -al $1"/"$file | awk '{ if ( ( ‘$3’=='$OWN’) && ($8==".") ) print $8}'`

就是当你要让shell去解释 $数字 而不是让awk去解释时,就关闭awk的单引号,把 $数字 放到awk的单引号外面,即可。

回答(3):

awk自定义函数格式如下,和其他语言基本没区别
function name(参数列表)
{
函数体
}
参数传递就是通过参数列表,在函数体可用return返回