使用AWK过滤基于列数的行

我有包含单列和两列的数据行。 我想要做的是提取只包含2列的行。

0333 foo bar 23243 qux 

只产生:

 0333 foo 23243 qux 

请注意,它们是制表符分隔的,即使对于只有一列的行,您在开始处也有选项卡。

有什么办法呢?

我试过但失败:

 awk '$1!="";{print $1 "\t" $2}' myfile.txt enter code here 

Solutions Collecting From Web of "使用AWK过滤基于列数的行"

您需要使用NF (字段数)变量来控制这些操作,例如在以下副本中:

 $ echo '0333 foo > bar > 23243 qux' | awk 'NF==2{print}{}' 0333 foo 23243 qux 

这将打印行如果字段的数量是两个,否则它什么也不做。 我有(似乎)奇怪的构造NF==2{print}{}的原因是因为awk一些实现将默认打印,如果没有规则匹配的行。 空命令{}保证这不会发生。

如果你足够幸运有一个不这样做,你可以逃避:

 awk 'NF==2' 

但上面的第一个解决方案将在这两种情况下工作。

 awk 'NF==2' file 
 awk '(NF==2){print}' test.txt