I have lines of data that contain single column and two columns. What I want to do is to extract lines that contain only 2 columns.
0333 foo
bar
23243 qux
yielding only:
0333 foo
23243 qux
Note that they are tab separated, even for lines with only one column you have tab at the beginning.
What's the way to do it?
I tried this but fail:
awk '$1!="";{print $1 "\t" $2}' myfile.txt
enter code here
You need to use the NF
(number of fields) variable to control the actions, such as in the following transcript:
$ echo '0333 foo
> bar
> 23243 qux' | awk 'NF==2{print}{}'
0333 foo
23243 qux
This will print the line if the number of fields is two, otherwise it will do nothing. The reason I have the (seemingly) strange construct NF==2{print}{}
is because some implementations of awk
will print by default if no rules are matched for a line. The empty command {}
guarantees that this will not happen.
If you're lucky enough to have one of those that doesn't do this, you can get away with:
awk 'NF==2'
but the first solution above will work in both cases.
awk 'NF==2' file
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With