awk:致命:无法打开文件“-v”进行读取(没有这样的文件或目录)
awk: fatal: cannot open file `-v' for reading (No such file or directory)
我是 awk 新手。我知道 -v 表示变量,所以我尝试在 shell 的每个变量中都这样做。但我不知道为什么会出现此错误。有人能帮我吗?我的代码有问题吗?
awk -v row_no=$row_no -v item=$item -v itemType=$itemType -v quantity=$quantity -v price=$price '{ NR==row_no;
=item
=itemType
=quantity
=price
}1' file.txt > tmp.txt && mv tmp.txt file.txt
我得到的错误是:
awk: fatal: cannot open file `-v' for reading (No such file or directory)
首先,如果您的 shell 变量包含空格,您的 awk 命令可能会失败,因此,请引用您的变量。例如,awk .... -v item="$item"....
第二,
awk ... '{ NR==row_no;
=item
=itemTyp
....}1'
语法错误。
NR==row_no{...}
或 {if (NR==row_no){....}}
。最后的 1
是什么意思?你想打印所有行吗?如果您只想打印带有 NR==row_no
的行,您可以将 print
放入 {...}
块并删除 1
.
我猜测你的目标是更新输入中带有NR==row_no
的行。
如果是这样,你可以试试这个:
awk -v var="$shellVar" -v ....
'NR==row_no{=...; =...;=...;}1' input.file > tmp.file && mv ...
我认为这个小例子模拟了你想要的:
$ seq 5 | awk -v row="3" 'NR==row{="hi"}1'
1
2
hi
4
5
由于您没有引用 shell 变量,因此其中一个变量的值可能包含由 space 分隔的两个单词。这使得值经历 word splitting 并导致第一个词作为声明的一部分出现,而另一个被解释为代码。这会导致以下选项 -v
被解释为文件参数,从而向您显示错误 awk: fatal: cannot open file ``-v' for reading (No such file or directory)
。第一个字也可能是空字
我是 awk 新手。我知道 -v 表示变量,所以我尝试在 shell 的每个变量中都这样做。但我不知道为什么会出现此错误。有人能帮我吗?我的代码有问题吗?
awk -v row_no=$row_no -v item=$item -v itemType=$itemType -v quantity=$quantity -v price=$price '{ NR==row_no;
=item
=itemType
=quantity
=price
}1' file.txt > tmp.txt && mv tmp.txt file.txt
我得到的错误是:
awk: fatal: cannot open file `-v' for reading (No such file or directory)
首先,如果您的 shell 变量包含空格,您的 awk 命令可能会失败,因此,请引用您的变量。例如,awk .... -v item="$item"....
第二,
awk ... '{ NR==row_no;
=item
=itemTyp
....}1'
语法错误。
NR==row_no{...}
或 {if (NR==row_no){....}}
。最后的 1
是什么意思?你想打印所有行吗?如果您只想打印带有 NR==row_no
的行,您可以将 print
放入 {...}
块并删除 1
.
我猜测你的目标是更新输入中带有NR==row_no
的行。
如果是这样,你可以试试这个:
awk -v var="$shellVar" -v ....
'NR==row_no{=...; =...;=...;}1' input.file > tmp.file && mv ...
我认为这个小例子模拟了你想要的:
$ seq 5 | awk -v row="3" 'NR==row{="hi"}1'
1
2
hi
4
5
由于您没有引用 shell 变量,因此其中一个变量的值可能包含由 space 分隔的两个单词。这使得值经历 word splitting 并导致第一个词作为声明的一部分出现,而另一个被解释为代码。这会导致以下选项 -v
被解释为文件参数,从而向您显示错误 awk: fatal: cannot open file ``-v' for reading (No such file or directory)
。第一个字也可能是空字