Да, при условии, что вы удовлетворяете условиям лицензии на все упакованное программное обеспечение (отправляете исходный код и т. Д.) И не нарушаете никакие товарные знаки, законы об авторском праве и т. Д. Кроме того, вы должны убедиться, что ваши действия не нанесут вреда любому третьему лицу, например, убийству и т. д.
Включенное программное обеспечение с закрытым исходным кодом не должно нарушать лицензии каких-либо библиотек, которые оно использует (некоторые лицензии допускают двоичную зависимость программного обеспечения с закрытым исходным кодом, некоторые - нет).
Поскольку вы настаиваете на том, чтобы сделать это с помощью awk
:
awk -F '' '{ sum = 0; for(i=1; i<=NF; i++) sum += $i; print "sum " sum }' file
Python 3.x подход (просто альтернативное решение):
sum_digits.py
скрипт:
import sys
with open(sys.argv[1], 'r') as f:
for l in f:
print("sum", sum(int(d) for d in l if d.isdigit()))
Использование :
python3 sum_digits.py yourfile
Вывод:
sum 8
sum 15
sum 13
POSIXly:
awk '{for (i = sum = 0; i++ < length;) s += substr($0, i, 1); print "sum", s}'
Тот же принцип, что и ответ Сато Кацуры: мы складываем все символы в строке; при преобразовании из строки в число символы, являющиеся десятичными цифрами, преобразуются в значение цифры, а остальные преобразуются в 0.
Удаление нецифровых символов (с помощью gsub(/[^0 -9]/, "")
или предварительная обработка с помощью tr -cd '0-9\n'
) может улучшить производительность.