Ваша команда awk
добавляет .
, потому что вы говорите ей напечатать $i
, а затем .
. Таким образом, он заканчивается дополнительным .
. Вместо этого вы могли бы сделать:
$ echo TRNPRD.STD.BSRE.BREX.J.20190520.V02.PRET |
awk -F'.' '{for(i=0;++i<=NF-6;) printf $i"."; print $(NF-5)}'
TRNPRD.STD.BSRE
Или просто напечатайте первые 3:
$ echo TRNPRD.STD.BSRE.BREX.J.20190520.V02.PRET |
grep -oP '^([^.]+\.){2}[^.]+'
TRNPRD.STD.BSRE
Конечно, вы также можете использовать свой оригинальный подход и просто удалить лишнее.
:
$ echo TRNPRD.STD.BSRE.BREX.J.20190520.V02.PRET |
awk -F'.' '{for(i=0;++i<=NF- 5;) printf $i".";}' | sed 's/\.$//'
TRNPRD.STD.BSRE$
Однако лучшим и самым простым решением будет cut
, предложенное @Panki .