вставка строк после определенной строки с циклом

У меня есть текстовый файл следующим образом;

   SITE              FIX    --COORD.CONSTR.--  
      << default for regional stations >>
ALL               NNN    100.  100.   100.     
      << IGS core stations >>
VILL VILL_GPS     NNN    0.050 0.050  0.05
MAS1 MAS1_GPS     NNN    0.050 0.050  0.05

Во-первых, я удаляю все строки значений по умолчанию после" <<станции ядра IGS>>" с этой командой;

sed -i '/GPS/d' ./text.data

Затем я должен добавить вход пользователя 4 идентификатора символов с вышеупомянутым форматом строки как;

echo -n "###ids?####" 
read ids

примите ввод данных пользователем brmu ista ankr. Затем файл text.data должен быть следующим образом;

SITE              FIX    --COORD.CONSTR.--  
      << default for regional stations >>
ALL               NNN    100.  100.   100.     
      << IGS core stations >>
BRMU BRMU_GPS     NNN    0.050 0.050  0.05
ISTA ISTA_GPS     NNN    0.050 0.050  0.05
ANKR ANKR_GPS     NNN    0.050 0.050  0.05

Как я могу вставить эти исходные данные с циклом в текстовый файл с определенным форматом как выше?

1
задан 9 November 2015 в 21:57

2 ответа

Я использовал бы awk:

read ids
# some validation here...

awk -v input="$ids" '
    BEGIN {
        n = split(toupper(input), user)
        fmt = "%-4s %-8s     NNN    0.050 0.050  0.05\n"
    }
    {print}
    /<< IGS core stations >>/ {
        for (i=1; i<=n; i++)
            printf fmt, user[i], user[i]"_GPS"
        exit
    }
' ./text.data

продукция

   SITE              FIX    --COORD.CONSTR.--  
      << default for regional stations >>
ALL               NNN    100.  100.   100.     
      << IGS core stations >>
BRMU BRMU_GPS     NNN    0.050 0.050  0.05
ISTA ISTA_GPS     NNN    0.050 0.050  0.05
ANKR ANKR_GPS     NNN    0.050 0.050  0.05
3
ответ дан 3 December 2019 в 06:40

Вы могли сделать:

sed -i '/GPS/d' text.data; read -p "###ids?####" ids; for i in $ids; do 
        printf '%s\t%s_GPS\tNNN\t0.050\t0.050\t0.05\n' "${i^^}" "${i^^}"
    done >> text.data

, Который образует петли по каждому слову в $ids и использование printf, чтобы напечатать его в желаемом формате. Эти ${i^^} делает переменный ВЕРХНИЙ РЕГИСТР.

2
ответ дан 3 December 2019 в 06:40

Другие вопросы по тегам:

Похожие вопросы: