루프를 사용하여 특정 줄 뒤에 줄 삽입

루프를 사용하여 특정 줄 뒤에 줄 삽입

다음과 같은 텍스트 파일이 있습니다.

   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자 ID를 추가해야 합니다.

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

나는 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

답변2

당신은 할 수 있습니다 :

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^^}

관련 정보