Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Shell 通过分割线来运行awk_Shell_Awk - Fatal编程技术网

Shell 通过分割线来运行awk

Shell 通过分割线来运行awk,shell,awk,Shell,Awk,这是awk中的一个基本问题。但我面临着这个问题,我不知道为什么。问题是当我在一行中运行awk命令时,例如 awk 'BEGIN {} {print $0;}' FILE 然后代码就可以正常运行了 但是如果我将代码分成两行,比如 awk ' BEGIN { } { print $0; }' FILE 它给了我一个错误,指出开始应该有一个动作部分。我想知道,既然我正在格式化的是同一个代码,为什么会出现这个错误。解决这个问题对我来说真的很重要,因为我要用awk写一行又一行

这是awk中的一个基本问题。但我面临着这个问题,我不知道为什么。问题是当我在一行中运行awk命令时,例如

awk 'BEGIN {} {print $0;}' FILE 
然后代码就可以正常运行了

但是如果我将代码分成两行,比如

 awk '
 BEGIN
 {
 }
 {
      print $0;
 }' FILE

它给了我一个错误,指出开始应该有一个动作部分。我想知道,既然我正在格式化的是同一个代码,为什么会出现这个错误。解决这个问题对我来说真的很重要,因为我要用awk写一行又一行的代码,所以我很难每次都把它格式化并放在一行中。你能帮我一下吗。非常感谢。注意。我正在shell环境中运行这个awk

在BEGIN`之后添加
'{',您将不会得到错误消息

BEGIN
的开头部分
{
需要与
BEGIN
相同的
行上。因此,请更改现有内容

awk '
 BEGIN
 {

您将不会收到错误消息

确实声明“开始和结束规则必须有操作;”,因此这可能是另一个问题

awk 'BEGIN {} ...
对我来说似乎有点奇怪(如果什么都没发生,真的没有理由这样做)


@Birei下面的有用评论解释了这些语句“在两种情况下解析的方式都不同。下一行中的open
{
被解析为一个没有模式的操作(与BEGIN无关),而在同一行中则表示BEGIN规则的一个空操作。”

如果您的BEGIN块中不需要任何代码,您应该将其删除。否则…请相信错误消息告诉您的内容!;-)尝试
awk'BEGIN{};{print$0;}'文件
以查看这是否会使错误消息变软。祝您好运。+1,在这两种情况下,解析将不同。下一行中打开的参数被解析为不带模式的操作(与
开始
无关),而在同一行中意味着开始规则的一个空动作。当然你可以随心所欲地完成你自己的答案,不用担心信用,我不介意:-)@Birei:这不是一个开放的括号,它是一个开放的大括号。@Dennis Williamson我会做出改变,但作为一个英语不是第一语言的人,我一直认为([{都被认为是paren,使用square、curly等只是限定词..你可以在上面学到的东西..)在美式英语中,
是一个括号。在英式英语中,IIRC是一个“圆括号”
awk 'BEGIN {} ...