ユーザーに2つの情報を要求したいと思います。
1) 変更するファイルの行番号 2) 変更する値。
これまで私のスクリプトは次のようになりました。
echo "Do you wish to enter a variable to be changed?"
select yn in "Yes" "No"; do
case $yn in
Yes)
echo "Please enter a variable to be changed"
read lineNum
echo "Please enter variable's new value"
read val
awk -v lineNum="$lineNum" -v val="$val" \
'BEGIN { if (NR == lineNum) print val; else print $0}' \
test.in > newtest.in
;;
No)
break;;
esac
done
test.inはすべての値を1つの列に入れます。
1
2
3
4
5
6
7
ありがとうございます。
編集する バグに言及することを忘れました:D。何らかの理由で新しいファイルが作成されましたが、指定された新しい値のみを使用して$ 0を使用することに関連している可能性があると思いますが、問題を解決する方法はわかりません。
答え1
存在するawk
これスタートブロック/ルールは、最初の入力レコードを読み取る前に一度だけ実行されます。、スクリプトとawkが機能するためにはここでは必要ないので、それを削除する必要があります。これにより、awk
ブロックはすべての入力/レコード読み取りに対して実行されます。
私も個人的に使用しています。3元1つのジョブ/別のステートメントのみがある状況です。
awk '{ print (NR==lineNum)?val:$0 }'