繁体   English   中英

基于具有AWK的列数过滤行

[英]Filtering Rows Based On Number of Columns with AWK

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

0333 foo
 bar
23243 qux

只屈服:

0333 foo
23243 qux

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

这样做的方法是什么?

我试过这个却失败了:

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

enter code here

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

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

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

如果你有幸有一个不能做到这一点的人,你可以逃脱:

awk 'NF==2'

但上面的第一个解决方案将适用于这两种情况。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM