[英]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.