linux入门之awk和shell变量传递
2013-08-03 16:50
691 查看
一、awk使用shell中的普通变量
方法1:使用引号法
aa="hello"
awk 'BEGIN {print "$aa"}'
输出$aa
awk 'BEGIN {print "'$aa'"}'
输出hello
awk 'BEGIN {print ""$aa""}'
输出空
aa="hello! coder"
awk 'BEGIN {print "'$aa'"}'
报错,双引号没配对,因为中间出现空格
awk 'BEGIN {print "'"$aa"'"}'
能正常显示hello! coder
方法2:使用-v法
awk -v varaa="$aa" 'BEGIN {print varaa}'
awk -v varaa=$aa 'BEGIN {print varaa}'
能正常显示,-v还是比较方便的,比较清晰
方法3:通过环境变量
aa="this is a test";export aa
awk 'BEGIN{print ENVIRON["aa"]}'
正常
注意设置环境变量的时候是export aa而不是export $aa
方法4:使用awk 'script' awkvar="shellvar" filename
aa="this is a test";export aa
awk 'END{print bb}' bb="$aa" a.txt
当把END改为BEGIN的时候就不能使用了
二、awk中使用shell的数组变量
aa=(a b c d e)
awk -v bb="$aa" 'BEGIN{print bb}'
只能输出a,估计是数组aa的第一个成员
aa=(a b c d e)
awk -v bb="$aa" 'BEGIN{for(i in bb) print bb[i]}'
报错
提示bb不是一个数组
aa=(a b c d e)
awk -v bb="${aa[*]}" 'BEGIN{split(bb,A," ");for(i in A) print i"---"A[i]}'
三、shell中使用awk中的数组
注意:shell中的数组是非关联数组,下标只能是数字,而awk中的数组是关联数组,下标可以是字符串
awk 在BEGIN中定义的变量名称居然不能叫index
eval $(awk 'BEGIN {xiabiao=0} {aa[$1]=$2} END{for(i in aa) {print "aa["xiabiao"]="aa[i];xiabiao+=1}}' a.txt)
echo ${#aa[@]}
echo ${aa[@]}
方法1:使用引号法
aa="hello"
awk 'BEGIN {print "$aa"}'
输出$aa
awk 'BEGIN {print "'$aa'"}'
输出hello
awk 'BEGIN {print ""$aa""}'
输出空
aa="hello! coder"
awk 'BEGIN {print "'$aa'"}'
报错,双引号没配对,因为中间出现空格
awk 'BEGIN {print "'"$aa"'"}'
能正常显示hello! coder
方法2:使用-v法
awk -v varaa="$aa" 'BEGIN {print varaa}'
awk -v varaa=$aa 'BEGIN {print varaa}'
能正常显示,-v还是比较方便的,比较清晰
方法3:通过环境变量
aa="this is a test";export aa
awk 'BEGIN{print ENVIRON["aa"]}'
正常
注意设置环境变量的时候是export aa而不是export $aa
方法4:使用awk 'script' awkvar="shellvar" filename
aa="this is a test";export aa
awk 'END{print bb}' bb="$aa" a.txt
当把END改为BEGIN的时候就不能使用了
二、awk中使用shell的数组变量
aa=(a b c d e)
awk -v bb="$aa" 'BEGIN{print bb}'
只能输出a,估计是数组aa的第一个成员
aa=(a b c d e)
awk -v bb="$aa" 'BEGIN{for(i in bb) print bb[i]}'
报错
提示bb不是一个数组
aa=(a b c d e)
awk -v bb="${aa[*]}" 'BEGIN{split(bb,A," ");for(i in A) print i"---"A[i]}'
三、shell中使用awk中的数组
注意:shell中的数组是非关联数组,下标只能是数字,而awk中的数组是关联数组,下标可以是字符串
awk 在BEGIN中定义的变量名称居然不能叫index
eval $(awk 'BEGIN {xiabiao=0} {aa[$1]=$2} END{for(i in aa) {print "aa["xiabiao"]="aa[i];xiabiao+=1}}' a.txt)
echo ${#aa[@]}
echo ${aa[@]}
相关文章推荐
- [转]Awk基础入门之三:shell & awk 变量传递
- 如何向awk中传递shell变量参数
- shell文本过滤编程(七):awk之变量传递
- AWK调用SHELL,并将变量传递给SHELL
- awk与shell之间的变量传递方法
- awk与shell参数传递(或说变量传递)二三点
- 向awk传递shell变量的两种方法
- linux系统shell变量入门
- awk/sed与shell变量的传递
- awk与shell之间的变量互相传递方法
- shell & awk 变量传递
- AWK与SHELL之间的变量传递方法
- Linux下将awk的变量赋值给shell变量
- shell & awk 变量传递+awk综合概要
- shell变量传递给sed,awk,grep简单方法
- Linux下如何让 awk 使用 Shell 变量
- 在SHELL中如何传递shell变量给awk
- 如何在shell脚本里传递一个变量给awk
- [Linux] awk与shell参数传递
- SHELL : 将shell变量传递给awk