只打印具有 2 个或更多字段的行?

Cur*_*tLH 4 awk

我有一个文本文件,我想弄清楚如何过滤掉只有 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)

谢谢您的帮助!

Sté*_*las 12

如果要保留在至少 2 个字段中包含数据的行:

grep '[^,].*,[^,]'
Run Code Online (Sandbox Code Playgroud)


Gra*_*eme 8

您需要将字段分隔符更改为逗号,如果您想要字段数(是最后一个字段),您也不应该在$前面有一个。最后以逗号结尾的行被认为有一个空的第二个字段,所以你应该排除最后一个字段为空的行: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 方法要好得多。