我是bash和awk的新手,我有这样的代码:
i=0
while [ $i -lt 10 ] ;
do
tes1() {
set_from=$i;
if [ -z "${set_from}" ]; then set_from=1; fi
awk '
{
time=$1;
from=$3;
to=$4;
status=$5;
set_from = set_from_set;
set_to = 10;
if (from == set_from && to == set_to){
print time, from, to, status;
}
}' set_from_set="$set_from" tes.txt;
}
done
我不知道从第一行获取 $ i ,也许这里有人知道如何为函数tes1()获取该 $ i ?谢谢...
答案 0 :(得分:1)
最简单的方法是将其作为函数的参数:
tes0 "$1"
通过这种方式,您可以将提供给脚本的第一个参数也作为第一个参数传递给函数。
答案 1 :(得分:0)
我正在猜测您实际上正在寻找类似的东西
for ((i=1; i<=10; i++)); do
awk -v set_from_set="$i" '{
time=$1;
from=$3;
to=$4;
status=$5;
set_from = set_from_set;
set_to = 10;
if (from == set_from && to == set_to){
print time, from, to, status;
}
}' tes.txt
done
声明一个函数十次却从未执行过该函数似乎是错误的,浪费的。
可能可以重构Awk脚本以在每个输入行上执行循环,但是在不知道数据是什么样的情况下,不确定是否会有所改善。如果数据文件很大,则可能只尝试处理一次。
如果您的实际问题是“如何将参数传递给函数”
fun () { printf "Hello, I got called with %s\n" "$1" }
fun 1
fun 2
或更笼统
funtoo () {
printf "All my arguments:\n"
printf "%s\n" "$@"
}
funtoo one "two 2" 'three 3' four\ 4