Reputation: 311
I need to delete the rows which contains 0 value in column number 5.
Before:
1QWO 10 5 45 100 7.5
1R0R 6 3 15 100 8.5
1R5M 4 0 6 0 6.5
1R8S 4 0 6 0 6
1R9L 2 1 1 100 6.3
1RG8 6 0 15 0 5.8
1RJU 10 0 45 0 7.2
1RKI 12 6 66 100 4.6
After:
1QWO 10 5 45 100 7.5
1R0R 6 3 15 100 8.5
1R9L 2 1 1 100 6.3
1RKI 12 6 66 100 4.6
Any one liner will be very helpful.
I know:
sed '/0/d' file_name
but above command will delete 0 from all the columns.
Upvotes: 5
Views: 2465
Reputation: 290525
Even faster:
awk '$5' file
If the 5th field is not 0
then the condition is evaluated as true - note that {print $0}
is the default block in awk
so it can be omitted if this is the only action you want to perform.
Upvotes: 10
Reputation: 85913
This is definately more suited to awk
:
$ awk '$5!=0' file
1QWO 10 5 45 100 7.5
1R0R 6 3 15 100 8.5
1R9L 2 1 1 100 6.3
1RKI 12 6 66 100 4.6
But if you really want a sed
solution:
$ sed -r '/\S+\s+{4}0\s+/d' file
1QWO 10 5 45 100 7.5
1R0R 6 3 15 100 8.5
1R9L 2 1 1 100 6.3
1RKI 12 6 66 100 4.6
Upvotes: 7
Reputation: 47249
With portable sed you can do it like this:
sed '/\([^ ]\+ \+\)\{4\}0\+ /d'
This way you confine checking for zero to the fifth column.
With perl you can use auto-split, notice that you don't need to specify a condition for $F[4]
because it is implicit:
perl -ane 'print if $F[4]'
Output in both cases:
1QWO 10 5 45 100 7.5
1R0R 6 3 15 100 8.5
1R9L 2 1 1 100 6.3
1RKI 12 6 66 100 4.6
Upvotes: 3
Reputation: 249652
awk '$5 != 0'
The machine won't let me submit unless I add this extra text.
Upvotes: 11