我试图提示用户输入两条信息:
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
2
3
4
5
6
7
谢谢。
编辑 忘了提及错误:D。由于某种原因,创建了一个新文件,但仅使用指定的新值,我想这可能与使用 $0 有关,但我无法弄清楚如何修复它。
答案1
在awk
这开始块/规则在读取第一个输入记录之前执行,并且仅执行一次,为了让你的脚本和 awk 工作,你需要删除它,因为这里不需要,然后awk
将为每个输入/记录读取执行该块。
我个人也用三元当我只有一个动作/其他语句时的情况。
awk '{ print (NR==lineNum)?val:$0 }'