使用AWK根据列数过滤行

从不说:

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

0333 foo
 bar
23243 qux

仅产生:

0333 foo
23243 qux

请注意,它们是制表符分隔的,即使对于只有一列的行,您也可以在其开头使用制表符。

怎么做呢?

我尝试了这个但是失败了:

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

enter code here
paxdiablo:

您需要使用NF(字段数)变量来控制操作,例如以下记录:

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

如果字段数为2,将打印该行,否则将不执行任何操作。我之所以具有(看似)奇怪的构造,NF==2{print}{}是因为awk如果没有任何规则匹配一行,则默认情况下将打印的某些实现empty命令{}保证不会发生这种情况。

如果您很幸运地拥有其中一个不做此事的人,则可以摆脱:

awk 'NF==2'

但以上第一种解决方案在两种情况下适用。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章