Скриптинг в Bash - PullRequest
       45

Скриптинг в Bash

0 голосов
/ 28 сентября 2011

У меня есть функция в 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 ]

3 голосов
/ 28 сентября 2011

Это должно сделать это:

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

Если все поля состоят из одного символа, вы можете немного упростить его (скажем, используя . вместо \([^@]*\)).

1 голос
/ 28 сентября 2011

Может быть, это то, что вы хотите?

например. у вас есть скрипт с именем 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@
1 голос
/ 28 сентября 2011
awk 'BEGIN {OFS=FS="@"} {for (i=2; i<=NF-1; i++) $i="f("$i")"; print}'
1 голос
/ 28 сентября 2011

Вы можете использовать sed:

sed -e 's/@\(.\)/@f(\1)/g'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...