
다음과 같은 텍스트 파일이 있습니다.
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^^}