Так я бег randomfile, который может принимать несколько аргументов ($ 1 и $ 2) не показаны, а затем что-то делает с аргументом, передаваемым ...Добавление номеров с петлей при использовании водопроводного выхода
с 3-го аргумента , я должен искать $ 3 (или не $ 3) в file1 и добавить количество экземпляров этого в file2 ...
это работает отлично:
cat file1 | grep $3 | wc -l | while read line1; do echo $3 $line1 > file2; done
cat file1 | grep -v $3 | wc -l | while read line2; do echo not $3 $line2 >> file2; done
Теперь я пытаюсь читать file2, что держит экземпляры поиска, я хочу получить числа в файле, получить сумму, затем добавить в файл2. Так, например, если $ 3 был «ребенок»:
file2 бы, содержа-
baby 30
not baby 20
, а затем я хочу, чтобы получить сумму от 20 до 30 лет, и добавить к этому же file2, так что это выглядит как-
baby 30
not baby 20
total 50
Это то, что я есть в данный момент:
cat file2 | grep -o '[0-9]*' | while read num ; do sum=$(($sum + $num));echo "total $sum" >> file2; done
мой file2 заканчивает с двумя линиями для сумм, где один из них - то, что мне нужно -
baby 30
not baby 20
total 30
total 50
Что я здесь пропустил?
Тема: Заменить 'while read line1; do echo $ 3 $ line1> file2; done' с 'while readline1; do echo $ 3 $ line1; done> file2 ', когда цикл while выполняется более одного раза: второй запуск перезапишет результаты dirst. Еще лучше: 'IFS = read -r line1; do echo "$ 3 $ {line1}"; done> file2 '. –