nev*_*int 19 unix linux bash awk
我有包含单列和两列的数据行.我想要做的是提取只包含2列的行.
0333 foo
bar
23243 qux
Run Code Online (Sandbox Code Playgroud)
只屈服:
0333 foo
23243 qux
Run Code Online (Sandbox Code Playgroud)
请注意,它们是制表符分隔的,即使对于只有一列的行,您在开头有选项卡.
这样做的方法是什么?
我试过这个却失败了:
awk '$1!="";{print $1 "\t" $2}' myfile.txt
enter code here
Run Code Online (Sandbox Code Playgroud)
pax*_*blo 29
您需要使用NF(字段数)变量来控制操作,例如在以下脚本中:
$ echo '0333 foo
> bar
> 23243 qux' | awk 'NF==2{print}{}'
0333 foo
23243 qux
Run Code Online (Sandbox Code Playgroud)
如果字段数为2,则将打印该行,否则将不执行任何操作.我有(看似)奇怪的构造NF==2{print}{}的原因是因为awk如果一条线没有匹配规则,默认情况下会打印一些实现.空命令{}保证不会发生这种情况.
如果你有幸有一个不能做到这一点的人,你可以逃脱:
awk 'NF==2'
Run Code Online (Sandbox Code Playgroud)
但上面的第一个解决方案将适用于这两种情况.