基于具有AWK的列数过滤行

时间:2010-08-03 05:53:59

标签: linux bash unix awk

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

0333 foo
 bar
23243 qux

仅屈服:

0333 foo
23243 qux

请注意,它们是制表符分隔的,即使对于只有一列的行也是如此 你有开头的标签。

这样做的方法是什么?

我尝试了但却失败了:

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

enter code here

3 个答案:

答案 0 :(得分:28)

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

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

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

如果你有幸有一个不这样做的人,你就可以逃脱:

awk 'NF==2'

但上面的第一个解决方案适用于两个个案。

答案 1 :(得分:9)

awk 'NF==2' file

答案 2 :(得分:5)

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