С perl
:
perl -lne 'for (/<Overall>([\d.eE+-]+)/g) {$n++; $sum += $1}
END{print $sum/$n if $n}'
Это дает возможность обрабатывать более одного тега
в строке. [\ d.eE + -] +
является грубым сопоставлением десятичного числа с плавающей запятой (допускает такие вещи, как 12, 1.2, -1E + 20 (хотя также и вещи, которые не являются действительными числами)).
В целевом аргументе нельзя использовать подстановочные знаки. Так что нужен хоть какой-то скрипт:
for d in *; do
if [[ -d "$d" ]]; then
pushd "$d"
mv __test__/index.js./data.js
popd
fi
done
Вот пример перемещения файлов.
for f in $(find -name index.js | grep __test__ ); do echo $f; destination=$(echo $f | awk 'BEGIN{FS="/"} {print $2}'); mv ${f}./$destination/data.js; done
Я проверял это, движение выполняется, как и ожидалось.
Я забыл о gnu parallel
!
ls -d -- */ | parallel "cd {} && mv./__test__/index.js./data.js 2>/dev/null"
find. -path '*/__test__/*' -type f -name "index.js" \
-execdir echo mv -vt../data.js {} \;
Удалите echo
, который предназначен для пробного -запуска, чтобы запустить команду mv
для файлов.
Удалите echo
s для реального изменения.
for i in */__test__/index.js; do
echo mv -v "$i" "${i%%/*}/data.js"
echo rm -vr "${i%/*}"
done
До
.
├── alpha
│ ├── index.js
│ ├── __test__
│ │ └── index.js
│ └── test.js
└── beta
├── index.js
├── __test__
│ └── index.js
└── test.js
После
.
├── alpha
│ ├── data.js
│ ├── index.js
│ └── test.js
└── beta
├── data.js
├── index.js
└── test.js