我有包含单列和两列的数据行。 我想要做的是提取只包含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
这将打印行如果字段的数量是两个,否则它什么也不做。 我有(似乎)奇怪的构造NF==2{print}{}
的原因是因为awk
一些实现将默认打印,如果没有规则匹配的行。 空命令{}
保证这不会发生。
如果你足够幸运有一个不这样做,你可以逃避:
awk 'NF==2'
但上面的第一个解决方案将在这两种情况下工作。
awk 'NF==2' file
awk '(NF==2){print}' test.txt