Проблема, с которой вы столкнулись, - это стандартный "pipe creates subshell" в bash
.
например, если вы сделаете
a=10
echo 100 | read a
echo $a
то a
все равно будет установлен в 10
с помощью bash.
В вашем случае у вас есть
igreppy | while read ...
do
....
done
и все вещи внутри этого while
цикла будут находиться в под-оболочке.
Вместо этого его можно переписать, используя подстановку процесса
while read ...
do
....
done < <(igreppy ...)
Теперь для цикла while
не создается под-оболочка.
Если вы открыты для решения Perl...
perl -ane 'printf("%-8s %-8s %-8s %-8s %-8s %-4s\n", $F[0], $F[1], $F[2], $F[3], $F[4], $F[6])' file
Эти опции строки команды -используются:
-n
повторять каждую строку входного файла, не печатать каждую строку автоматически
-a
режим авторазбиения – разбить входные строки на массив @F. По умолчанию разделение по пробелам
-e
выполнить следующий perl-код