以下に示すように、ユーザー入力テキストファイルにパターンを追加するコードがあります。
echo -n "WHICH STATIONS?"
read station
awk -v input="$station" '
BEGIN {
n = split(tolower(input), user)
pattern= "force %-4s npos 0. .0001\n"
}
{print}
/<< write after this line >>/ {
for (i=1; i<=n; i++)
printf pattern, user[i]
exit
}
' ./data > data_2
ユーザー入力を想定すると、abcd ab12
コマンドは次の行に追加されます。
force abcd npos 0. .0001
force ab12 npos 0. .0001
以下のように、別の行に各入力に文字列を追加する必要がありますepos
(上記の例と同じ入力について)。upos
force abcd npos 0. .0001
force abcd epos 0. .0001
force abcd upos 0. .0001
force ab12 npos 0. .0001
force ab12 epos 0. .0001
force ab12 upos 0. .0001
pattern
この行をデータファイルに追加するオプションをどのように変更しますか?
答え1
GNU awkを使う:
pattern = "force %1$-4s npos 0. .0001\n" \
"force %1$-4s epos 0. .0001\n" \
"force %1$-4s upos 0. .0001\n"
[...]
printf pattern, user[i]
printf(3)
GNUと同様に、libc
GNUでも次のことを意味します。%<n>$s
awk
N型の後の最初のパラメータ。
持ち運べる:
pattern = "force %-4s npos 0. .0001\n" \
"force %-4s epos 0. .0001\n" \
"force %-4s upos 0. .0001\n"
[...]
printf pattern, j=user[i], j, j
答え2
「Xpos」リストの動的指定を可能にする別の方法
echo -n "WHICH STATIONS?"
read station
awk -v input="$station" -v 'xpos=npos epos upos' '
BEGIN {
n = split(tolower(input), user)
m = split( xpos, Pos)
pattern= "force %-4s %s 0. .0001\n"
}
1
/<< write after this line >>/ {
for (i=1; i<=n; i++)
for (j=1;j<=m;j++)
printf pattern, user[i],Pos[j]
exit
}
' ./data > data_2