사용자에게 두 가지 정보를 요청하려고 합니다.
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
해당 블록은 모든 입력/레코드 읽기에 대해 실행됩니다.
저도 개인적으로 사용하고 있어요3위안하나의 작업/다른 명령문만 있는 상황입니다.
awk '{ print (NR==lineNum)?val:$0 }'