awk 在函数中怎么传参数

set -x
function ergodic(){
echo " ls -al $1 | awk '{ if ( ( $8!=\"..\") && ($8!=\".\") ) print $8}' "
exit 0
for file in ` ls -al $1 | awk '{ if ( ( $8!="..") && ($8!=".") ) print $8}' `
do
echo $1"/"$file" ------ "$OWN
if [ -d $1"/"$file ]
then
local mydir=1
mydir=`ls -al $1"/"$file | awk '{ if ( ( $3==$OWN) && ($8==".") ) print $8}'`

echo "ls -al $1"/"$file | awk '{ if ( ( $3==$OWN) && ($8==\".\") ) print $0}'"
echo "mydir:"$OWN`ls -al $1"/"$file | awk '{ if ( ( $3==$OWN) && ($8==".") ) print $0}'`
if [ !$mydir ]
then
echo $1/$file
else
ergodic $1"/"$file
fi
else
local mydir=`ls -al $1"/"$file | awk '{ if ( $3==$OWN ) print $8 }'`
if [ $mydir==$file ]
then
echo $1"/"$file"------file"
fi
fi
done
}

INIT_PATH=$1
OWN=$2
ergodic $INIT_PATH

这是我当前的代码
目的是找 某用户的文件夹或文件
awk里面的$数字得不到值!

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
温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2016-05-26
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的单引号外面,即可。追问

谢谢你!我说的是$数字是指awk分割后字段号。
用这种格式吗?
mydir=`ls -al $1"/"$file | awk '{ if ( ( ‘$3’=='$OWN’) && ($8==".") ) print $8}'`

追答

awk是独立于shell的一个文本处理工具。
如果 $数字 是 awk 的内置变量,那么就放在awk的单引号中,不用拿出来。
$OWN 这个肯定不是 awk 里定义的,是shell的变量,需要放到awk的单引号外面。
mydir=`ls -al $1"/"$file | awk '{ if ( ( $3=='$OWN’) && ($8==".") ) print $8}'`
即把awk后的内容分成几段:
'{ if ( ( $3=='
$OWN
’) && ($8==".") ) print $8}'

你问的“awk 在函数中怎么传参数” 是什么意思?你要传什么参数?

本回答被提问者采纳
第2个回答  2011-02-22
awk自定义函数格式如下,和其他语言基本没区别
function name(参数列表)
{
函数体
}
参数传递就是通过参数列表,在函数体可用return返回追问

不好意思 我刚接触shell 没有怎么明白您说的。能给个实例吗?

追答

上述所说的是awk代码内的自定义函数
你要的可能是awk的处理和传值机制
awk是一种行处理机制,也就是输入的每一行都经过'{xxxxx}'内的运算
awk一般输入方式有三种
1,文件传入
如: awk '{xxxx}' fname.txt
这里awk将对fname.txt的每一行进行处理
2,管道传入
如: cat fname.txt | awk '{xxxx}'
这里awk同样将对fname.txt的每一行进行处理
3,变量传入
如: awk -v a="123" '{xxxx}'
这里awk程序内部将可以使用a并得到a的值