Учитывая, что файл отсортирован по второму и четвертому полям, строки, которые необходимо пронумеровать последовательно, идут последовательно. Итак, обработайте файл построчно. Если строка находится в той же последовательности, что и предыдущая, увеличьте порядковый номер, в противном случае сбросьте порядковый номер на 1.
awk -F, '{
if ($2 FS $4 == previous) i++; else i=1;
sub(/^[^,]*/, i);
print;
previous = $2 FS $4;
}'
У вас есть четыре возможности :файл a существует, а файл b нет, и наоборот, оба файла существуют или ни один из них. Вы только что контролировали первую возможность, но не остальные три. Но, как вы заявили, вы хотите что-то сделать, если оба файла существуют , поэтому вы должны это контролировать.
while true; do
if [[ ! -f "Test.FChk" && -f "run.log" ]]; then
echo "Checking job status..."
sleep 5
printf "Calculation failed, script ended"
return
# here you control if both files exist
elif [[ -f "Test.FChk" && -f "run.log" ]]; then
break # break the loop, the next code will continue
fi
### this will just stop the loop at the first iteration!
break ### not something you need
###
done
Это решение продолжает работать до тех пор, пока не появится хотя бы run.log
, и завершает сценарий, если Test.FChk
отсутствует. Если присутствуют оба файла, сценарий продолжается.
#!/bin/bash
while true; do
if [ -f "run.log" ]; then
if [ -f "Test.FChk" ]; then
# calculation finished, break loop
break
fi
echo "Calculation failed, exiting." >&2
exit 1
fi
echo "Checking job status..."
sleep 5
done
echo "Calculation successfully finished!"
# do something