
我有一個文字檔如下;
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 core station >>”之後的所有預設行;
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^^}
變數大寫。