我试图提示用户提供两条信息:
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。出于某种原因,创建了一个新文件,但仅使用指定的新 val,我想这可能与使用 $0 有关,但我无法弄清楚如何修复它。
在BEGIN
awk
块/规则在读取第一个输入记录之前执行,并且只执行一次,为了让您的脚本和 awk 工作,您需要将其删除,因为这里不需要,然后awk
将为每个输入/记录读取执行该块。当我只有一个动作/其他语句时,我个人也使用三元条件。