我正在尝试awk
在bash
脚本内部使用并完成一个相当普通的任务:迭代结构良好的文件行,并通过定界符将它们分成数组。这是文件中的一个示例:
Joe:Johnson:25
Sue:Miller:27
有许多示例说明如何在交互模式下在一行上完成此操作,但是,我在一个脚本中执行此操作,在该脚本中,我想使用bash本身在awk子外壳之外由awk操纵的数组:
cat ${smryfile} | while read smryline; do
echo ${smryline}
#now i want to split the line into array 'linearray' in awk but have it usable when i get back to bash
echo ${smryline} | awk '{split($0,$linearray,":")}'
varX=$linearray[2]
echo $varX
#do something with $varX
done
我收到一个错误:
awk: syntax error at source line 1
context is
>>> {split($0,$linearray <<< ,":")}
awk: illegal statement at source line 1
是否可以做我想做的事情(使用在其范围之外的awk中定义的数组),我应该怎么做?
我认为您可以不用awk就能完成自己想做的事情:
cat "${smryfile}" | while IFS=: read first last varx
do
echo "first='$first' last='$last' varx='$varx'"
# do something
done
这将产生:
first='Joe' last='Johnson' varx='25'
first='Sue' last='Miller' varx='27'
请注意,即使文件中的某些名称包含空格,此方法也将起作用。
还要注意,cat
不需要使用上面的内容:
while IFS=: read first last varx
do
echo "first='$first' last='$last' varx='$varx'"
# do something
done <"${smryfile}"
cat
如上所述,删除的一个附带好处是,您在循环中创建的任何变量都将在循环结束后保留下来。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句