我有一个文本文件,我想弄清楚如何过滤掉只有 1 个字段中有数据的任何行,留下 2 个字段的行。我遇到了以下代码:awk '$NF > 1'
但我无法让它按照我想要的方式工作。任何想法我可能做错了什么?
这是我的数据示例:
simpledaddy11,EastOfBrussels
simpledaddy11,thomaswatkins
simpledaddy11,
simpledaddy11,
simpledaddy11,
simpledaddy11,
simpledaddy11,
simpledaddy11,
simpledaddy11
Moral_Animal,EastOfBrussels
Moral_Animal,
Moral_Animal,
Moral_Animal,
Moral_Animal,
Moral_Animal,
Moral_Animal,
Moral_Animal,
Moral_Animal
skilur_ua,EastOfBrussels
skilur_ua,thomaswatkins
skilur_ua,
skilur_ua,
skilur_ua,
skilur_ua,
Run Code Online (Sandbox Code Playgroud)
这是我想要的结果:
simpledaddy11,EastOfBrussels
simpledaddy11,thomaswatkins
Moral_Animal,EastOfBrussels
skilur_ua,EastOfBrussels
skilur_ua,thomaswatkins
Run Code Online (Sandbox Code Playgroud)
谢谢您的帮助!
您需要将字段分隔符更改为逗号,如果您想要字段数(是最后一个字段),您也不应该在$
前面有一个。最后以逗号结尾的行被认为有一个空的第二个字段,所以你应该排除最后一个字段为空的行:NF
$NF
awk -F, 'NF>1 && $NF!=""'
Run Code Online (Sandbox Code Playgroud)
从斯蒂芬的评论来看,我显然没有正确阅读问题。在awk
包含多于一个非空白字段打印行更复杂:
awk -F, '{ nonblank=0;
for(i=1;i<=NF;i++){
if($i!="") nonblank++
}
if(nonblank>1) print $0
}'
Run Code Online (Sandbox Code Playgroud)
为此,Stephane 的 grep 方法要好得多。