Вы должны были опубликовать несколько примеров строк и Ваш текущий сценарий, чтобы получить точный ответ.
Я бы не стал сравнивать, меньше ли число, но сохранил бы общее смещение при обработке строки после добавления смещения [0 для первого файла] и отрегулировал смещение.
Пример :awk 'FNR==1&&ARGIND>1{distoffset=distnow}{$2+=distoffset;distnow=$2+$3;print $0;}'
Предполагая, что у вас есть расстояние в поле 2 и длина текущей записи в поле 3 (это необходимо добавить к расстоянию предыдущей записи. Я предполагаю, что в противном случае первая запись файла имела то же расстояние, что и последняя запись предыдущего файла. файл.
По другому Вашему вопросу я не понимаю, чего Вы хотите. Добавление приращения 0,05 тоже не проблема, но не могу сказать Вам, как это сделать, если я не понимаю точного требования.
Таким образом, с дополнительной информацией с Вашей стороны я могу сделать свой пример более полным.
Сначала более подробная версия:
rm -f all.csv
awk '
FNR==1 {
if (ARGIND>1) {
timeoffset = timenow + 0.05;
feetoffset = feetnow;
metersoffset = metersnow;
milesoffset = milesnow;
kmeteroffset = kmeternow;
} else {
print $0;
}
next;
}
FNR>1{
$1 += timeoffset; timenow = $1;
$2 += feetoffset; feetnow = $2;
$3 += metersoffset; metersnow = $3;
$4 += milesoffset; milesnow = $4;
$5 += kmeteroffset; kmeternow = $5;
print $0;
}
' *.csv > all.csv
И еще один, использующий вместо этого циклы и массив:
rm -f all.csv
awk '
FNR==1 {
if (ARGIND>1) {
for (cfn = 1; cfn <= NF; cfn++) {
offsetvals[cfn] = savedvals[cfn];
}
offsetvals[1] += 0.05;
} else {
print $0;
}
next;
}
FNR>1{
for (cfn = 1; cfn <= NF; cfn++) {
$cfn += offsetvals[cfn];
savedvals[cfn] = $cfn;
}
print $0;
}
' *.csv > all.csv
И версия с циклом, которая является более общей и может повторно использоваться для файлов, где это не должно применяться ко всем полям или должно быть динамическим:
rm -f all.csv
awk '
BEGIN {
procfields["tm"] = 1;
procfields["ft"] = 2; procfields["mt"] = 3;
procfields["ml"] = 4; procfields["km"] = 5;
}
FNR==1 {
if (ARGIND>1) {
for (fnname in procfields) {
cfn = procfields[fnname];
offsetvals[cfn] = savedvals[cfn];
};
offsetvals[procfields["tm"]] += 0.05;
} else {
print $0;
}
next;
}
FNR>1{
for (fnname in procfields) {
cfn = procfields[fnname];
$cfn += offsetvals[cfn];
savedvals[cfn] = $cfn;
};
print $0;
}
' *.csv > all.csv
Предполагая, что строка заголовка, которую вы разместили, не содержится в файлах (, было бы легко реализовать, подумал ).
Второй предполагает, что все поля нуждаются в обработке.
Вы можете опустить все пробелы, включая символы новой строки из скрипта AWK, которые не находятся в кавычках (в этом случае пробелы вообще не заключаются в кавычки/необходимы ), как Вы предпочитаете. (Также можно опустить некоторые полу -коклоны, но я предпочитаю этого не делать.)