用Bash编写脚本

时间:2011-09-27 22:08:24

标签: bash sed awk

我在bash中有一个函数说parse,它接受一个参数,函数名是f。我要处理的文件有点像

a@b@c@
a@d@e@g@
m@n@
t@

我想将输出设为

a@f(b)@f(c)@
a@f(d)@f(e)@f(g)@
m@f(n)@
t@

这是将函数f应用于除第一个之外的所有函数。任何线索,我该怎么做?

4 个答案:

答案 0 :(得分:3)

这应该这样做:

sed 's/@\([^@]*\)/@f(\1)/g'

如果所有字段都是单个字符,您可以稍微简化一下(例如,使用.而不是\([^@]*\))。

答案 1 :(得分:1)

您可以使用sed:

sed -e 's/@\(.\)/@f(\1)/g'

答案 2 :(得分:1)

awk 'BEGIN {OFS=FS="@"} {for (i=2; i<=NF-1; i++) $i="f("$i")"; print}'

答案 3 :(得分:1)

也许这就是你想要的?

e.g。你有一个名为sqr.sh的脚本:

kent$  cat sqr.sh
#!/bin/bash
echo $(($1*$1))

现在您想在输入中应用上述功能:

kent$  echo "foo@2@3@4@
0@10@20@
x@"|awk -F'@' -v OFS=@ '{for(i=2;i<=NF;i++) if($i) "./sqr.sh "$i|getline $i; print}'

foo@4@9@16@
0@100@400@
x@