На Unix-подобных системах *.sh
- это глобусное выражение, которое расширяется оболочкой и результаты передаются в качестве аргументов вызываемой программе. Если и только в случае отсутствия совпадающих файлов, выражение глобуса будет передано как есть. Вы должны привыкнуть цитировать подстановочные знаки, если хотите, чтобы они передавались запущенной программе.
В качестве примера, если вы запустите найдите . -путь *.sh
из /путь/do_not_upload/updates/1.1.1/run_pre_update/
, то выполняемая команда будет find . -путь 001.sh 002.sh
, что почти наверняка не то, что вам нужно.
Обратите внимание, что это отличается от MS-DOS и связанных с ней систем, в которых расширение glob выполняется (или не выполняется) вызываемой программой.
Чтобы предотвратить расширения оболочки, заключите аргумент в двойные или даже одинарные кавычки - это передаст его вызываемой программе дословно и, таким образом, позволит найти
сделать свои собственные расширения:
$ find . -path '*.sh'
Ваша иллюстрация не совсем соответствует вашим словам.
Если вы имеете в виду то, что вы говорите (и если я правильно понимаю ваши слова),
и если предположить, что у вас есть список значений "Y".
(т.е. количество часов в диапазоне от 0 до 2400).
которые вы хотите нормализовать, вы можете сделать то, что хотите, с помощью этого awk
кода:
awk '
NR==1 { prev_good = $1 }
{
data = $1
if (data < prev_good) {
count++
next
}
if (count > 0) {
count++
for (i = 1; i < count; i++) {
print prev_good + (data-prev_good) * i / count
}
count = 0
}
print data
prev_good = data
}'
Он предполагает, что первая точка данных достоверна (NR==1 { prev_good = $1 }
).
После этого,
если точка данных меньше предыдущего хорошего значения (prev_good
,
которое является наибольшим значением, наблюдавшимся до сих пор), рассматривайте ее как недействительную:
пропустите ее (next
) и посчитайте точки, которые вы пропустили.
Когда вы получите хорошее значение, проверьте count
- если оно положительное,
это означает, что мы пропустили некоторые данные, поэтому сгенерируйте такое количество значений данных,
линейно интерполируя между последним хорошим значением и текущим значением.
Затем выведите новое достоверное значение.
Если ваши входные данные содержат "X" и "Y" (дата и часы), это становится немного сложнее - особенно если интервалы "X" неравномерны.
Вы могли бы сделать это в виде чистого сценария оболочки, но это было бы глупо.
awk
, однако, кажется, является хорошим инструментом для этой работы.