Chinaunix
标题:
【急!】有关awk里split函数 && 将数组作为参数传入函数 的问题
[打印本页]
作者:
krisy0102
时间:
2011-05-12 14:01
标题:
【急!】有关awk里split函数 && 将数组作为参数传入函数 的问题
1.
echo ${f[*]}|awk '{ print split($0,F," ") }'
为什么
echo ${F[*]}
输出为空?
split划分出的数组只能在awk语句里面使用吗?能不能进行数组复制,比如说 array=(${F[*]}) ?
2.
怎么样将数组作为参数传入函数?
add_arr()
{
i=0
sum=0
while [ $i -lt "$2" ]
do
sum=`expr $sum+ ${$1[$i]}`
let i++
done
echo "sum=$sum"
}
add_arr "${F[*]}" $num
多谢各位大虾!!!
作者:
howge
时间:
2011-05-12 14:29
shell 不支持这种! 必须一个一个取
作者:
yinyuemi
时间:
2011-05-12 14:58
本帖最后由 yinyuemi 于 2011-05-12 15:42 编辑
回复
1#
krisy0102
1. awk 的数组不能拿出来用,可以这样:
echo ${f[*]} |awk '{l=split($0,a," ");for(i=1;i<l;i++) s=s" "a[i];print "eval F=("s a[l]")"}' |sh
复制代码
2. 试试这样:
cat sh.txt
F=(1 2 3 4 5)
add_arr()
{
i=0
sum=0
while [ $i -lt "$2" ]
do
sum=$(($sum+$(eval echo '${'$1[$i]})))
let i++
done
echo "sum=$sum"
}
add_arr $1 $2
./sh.txt F 4
sum=10
复制代码
作者:
krisy0102
时间:
2011-05-12 18:43
回复
3#
yinyuemi
能解释下'${'$1[$i]} 中的'${'吗?
作者:
krisy0102
时间:
2011-05-12 19:01
回复
3#
yinyuemi
还有一个问题要请教:怎么样改变传入函数的数组元素的值?谢谢你!
作者:
Shell_HAT
时间:
2011-05-13 01:02
回复
5#
krisy0102
能否给个例子描述一下你想把什么改变成什么?
作者:
yinyuemi
时间:
2011-05-13 01:11
回复
4#
krisy0102
echo '${'$1[$i]} 加单引号主要是解释$为字符串,或是理解为先不把${}的形式解释为一个数组,而是先去解释$1 和 $i
所以也可以写成 echo \${$1[$i]} 或 echo $\{$1[$i]}。
作者:
krisy0102
时间:
2011-05-13 09:02
回复
6#
Shell_HAT
# Include_or_Not
# Input: $1: FLAG_ $2: CHECK_ $3: NF_ $4: $5: one line from input file
# Output: none
Include_or_Not()
{
nf_=$3
i=0
while [ i -lt $nf_ ]
do
check_=$(eval echo '${'$2[$i]})
str=`grep "$check_" $5`
if [ -z "$str"];then
continue
else
# flag_[$i]=1
fi
let i++
done
}
复制代码
Include_or_Not:在输入文件中按行查找若干字符串,这些字符串放在CHECK_数组中,比如说CHECK_[0]="a"、CHECK_[0]="b"、CHECK_[0]="c",
找到的话就将FLAG_数组中的对应位置置1.NF_表示CHECK_数组的长度
作者:
krisy0102
时间:
2011-05-13 16:24
回复
6#
Shell_HAT
还有一个问题,sed中如何通过包含正则表达式的变量来进行匹配?
比如
#!/bin/sh
mode="username .* password 1 .*"
s="username cupcenter password 1 030sadkljflkwjej84B1B"
t1=`echo "$s"|grep "$mode"` #可以找出
t2=`echo "$s"|sed -n '/'$mode'/p'` #不行
作者:
krisy0102
时间:
2011-05-16 15:27
作者:
yuloveban
时间:
2011-12-05 21:31
awk 'BEGIN{for(i=1;i<=255;i++){for(a=0;a<=3;a++){print "192.168."a"."i}}}'
欢迎光临 Chinaunix (http://bbs.chinaunix.net/)
Powered by Discuz! X3.2