I have a file (input) I want to sort the file based on the number of times a pattern in the first column occurs for example grapes occurs 4 times in combination with other patterns so i want it to be first like shown in the output file. then apple ocuurs thrice so it occupies second position and so on
input
apple banana
apple apple
apple grapes
grapes banana
grapes melon
grapes orange
grapes cherry
orange apple
orange banana
banana cherry
output
grapes banana
grapes melon
grapes orange
grapes cherry
apple banana
apple apple
apple grapes
orange apple
orange banana
banana cherry
cat data
apple banana
apple apple
apple grapes
grapes banana
grapes melon
grapes orange
grapes cherry
orange apple
orange banana
banana cherry
awk '{a[$1]++}END{for (i in a) {print i,a}}' data|sort -k2 -nr|awk '{print $1}'|xargs -i ksh -c 'grep "^{}" data'
xargs: ksh: No such file or directory
#!/usr/bin/perl
use strict;
use warnings;
my %fruit_salad;
while(<DATA>){
chomp;
my ($main,$side)=split/\s+/,$_;
push @{$fruit_salad{$main}},$side;
}
for my $main (sort {scalar @{$fruit_salad{$b}} <=> scalar @{$fruit_salad{$a}} } keys %fruit_salad ){
for my $side (@{$fruit_salad{$main}}){
print "$main\t$side\n";
}
}
__DATA__
apple banana
apple apple
apple grapes
grapes banana
grapes melon
grapes orange
grapes cherry
orange apple
orange banana
banana cherry