Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/17.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
Bash AWK,致命:尝试访问字段-1_Bash_Awk - Fatal编程技术网

Bash AWK,致命:尝试访问字段-1

Bash AWK,致命:尝试访问字段-1,bash,awk,Bash,Awk,你好 当我试图使用awk'BEGIN{FS=“,”}时,我想知道如何使awk正确地打印输入文件的结构;NF>1{print$(NF-1)}' 预期产出 bogota bogota bogota bogota bogota whitehouse stn 通过提议的尝试,我获得: bogota bogota bogota bogota bogota whitehouse stn 而且,如果我不使用NF>1,我会得到这篇文章标题上提到的错误 提前感谢您提供的任何线索如果我正确理解您的需求,您

你好

当我试图使用
awk'BEGIN{FS=“,”}时,我想知道如何使awk正确地打印输入文件的结构;NF>1{print$(NF-1)}'

预期产出

bogota
bogota
bogota
bogota
bogota



whitehouse stn
通过提议的尝试,我获得:

bogota
bogota
bogota
bogota
bogota
whitehouse stn
而且,如果我不使用
NF>1
,我会得到这篇文章标题上提到的错误


提前感谢您提供的任何线索

如果我正确理解您的需求,您需要:

awk -F, '{print $(NF?NF-1:0)}'
如果有两个或更多字段,则打印最后一个字段,否则打印整行

说明:

括号内的表达式是标准的
?:
三元运算符,其形式为
条件?value\u if\u true:value\u if\u false
。在awk中,数值(如
NF
)如果不是0,则为真


同样重要的是要知道,在awk中,
$
是一个接受数值参数的一元运算符
$(i)
0字段≤ NF
;如果
i==0
,则为整行;如果
i>NF
,则为空字符串。
i
的其他值是非法的。

如果我正确理解您的需求,您需要:

awk -F, '{print $(NF?NF-1:0)}'
awk -F, '{print $(NF>1?NF-1:"")}' file
如果有两个或更多字段,则打印最后一个字段,否则打印整行

说明:

括号内的表达式是标准的
?:
三元运算符,其形式为
条件?value\u if\u true:value\u if\u false
。在awk中,数值(如
NF
)如果不是0,则为真



同样重要的是要知道,在awk中,
$
是一个接受数值参数的一元运算符
$(i)
0字段≤ NF
;如果
i==0
,则为整行;如果
i>NF
,则为空字符串。
i
的其他值是非法的。

您希望得到什么样的输出?如果该行为空,
NF
将为0,而不是1,这就是为什么会出现错误的原因。@rici请查看更新如果一行只包含1个字段,您希望输出什么?谢谢@EdMorton,观点正确。在这种情况下,我宁愿选择一个空行。@Alejandro好的,我刚刚发布了解决方案。你希望得到什么样的结果呢?如果该行为空,
NF
将为0,而不是1,这就是为什么会出现错误的原因。@rici请查看更新如果一行只包含1个字段,您希望输出什么?谢谢@EdMorton,观点正确。在这种情况下,我更喜欢空行。@Alejandro好的,我刚刚发布了解决方案。是的!非常感谢,这就是我想要的。如果我问你
$(NF?NF-1:0)
是如何工作的,那就太过分了。@Alejandro这是一个问题。你也可以选择把它写成
awk-F,'NF{print$(NF-1)}文件
@jaypal:我把解释移到了答案上。您的程序不是等价的,因为如果
NF
为0,它将不打印任何内容,并且预期的输出是一个空行(在这种情况下,它恰好是
$0
的值:)@rici Aah my bad。我没有正确地阅读这个问题。要打印空白行,<代码> AWK-F,'NF{Prime$(NF-1);下一个} 1’文件< /代码>可能更合适,但您的更习惯。代码>:)
。是的!非常感谢,这就是我想要的。如果我问你
$(NF?NF-1:0)
是如何工作的,那就太过分了。@Alejandro这是一个问题。你也可以选择把它写成
awk-F,'NF{print$(NF-1)}文件
@jaypal:我把解释移到了答案上。您的程序不是等价的,因为如果
NF
为0,它将不打印任何内容,并且预期的输出是一个空行(在这种情况下,它恰好是
$0
的值:)@rici Aah my bad。我没有正确地阅读这个问题。要打印空白行,<代码> AWK-F,'NF{Prime$(NF-1);下一个} 1’文件< /代码>可能更合适,但您的更习惯。代码>:)
。非常感谢您抽出时间来教我(:。祝您愉快Ed Morton,很抱歉通过这种方式问您。但是,这是:
$(NR%2=1?总和:“0”)
正确吗?@Alejandro这取决于您希望它做什么。也许您应该发布一个新问题,其中包含自己的示例输入和预期输出。谢谢,这就是我正在尝试做的。不,Kents对该问题的回答完全正确,并且您发布的脚本没有任何意义。非常感谢您的回复I me and teaching me(:。祝您愉快Ed Morton,很抱歉这样问您。但是,这是:
$(NR%2=1?sum:“0”)
correct?@Alejandro这取决于您希望它做什么。也许您应该发布一个新问题,其中包含自己的示例输入和预期输出。谢谢,这就是我正在尝试做的。不,Kents对该问题的回答完全正确,并且您发布的脚本与发布的预期输出不符。
awk -F, '{print $(NF>1?NF-1:"")}' file