India 265 for 1 (Rohit 123*, Kohli 96*) beat Bangladesh 264 for 7 (Tamim 70, Mushfiqur 61, Jadhav 2-22, Bumrah 2-40) by 9 wickets
Scorecard and ball-by-ball details
The best team at ICC events since 2010 marched into its fourth final in seven tournaments to set up a summit clash against Pakistan, pitting the tournament's best bowling sides against each other.
Like they did in the 2015 World Cup quarter-final, first time semi-finalists Bangladesh went toe to toe with India for about 30 overs - even inched ahead perhaps - but came apart against the non-turning, part-time, extremely slow offspin of Kedar Jadhav. They slipped from 142 for 2 in 25 overs to only 264 on a fresh pitch at Edgbaston. While Jadhav brought down the total from the realms of 320, Jasprit Bumrah's final spell of 5-0-27-1 shaved a further 20 off what Bangladesh looked good for.
In response, Rohit Sharma, Virat Kohli and Shikhar Dhawan put up an exhibition, picking apart Bangladesh's bowling with delectable stroke-play. Rohit brought up his first hundred of this tournament and moved to No. 2 on the run-scoring charts; Dhawan reclaimed the lead from Tamim Iqbal; and Kohli - who had been scoring runs despite not looking at his best - signalled a return to sublime form while becoming the fastest to 8000 ODI runs. It was an ominous sign for India's opponents in what will be their third final appearance in the last four 50-over ICC events; in the other event they lost in the semi-final.
There was a calm to how India chased down the target, the slickness of a team used to such situations. This was their sixth semi-final in ICC events in seven years. Veterans of big matches, they prefer to sit back while their oppositions work themselves into a frenzy; when they make a mistake, India swoop in.
It looked like they had done that in the seventh over when Bhuvneshwar Kumar out-thought the aggressive Sabbir Rahman after he had raced away to 19 off 12. Having seen him chip down twice to clear mid-off, Bhuvneshwar started to mix bouncers and length balls. Bumrah did his bit by cramping Tamim Iqbal up at the other end. Thirteen straight dot balls brought the expected loose shot, and the wicket, to the sucker ball, reducing Bangladesh to 31 for 2.
Mushfiqur Rahim kept attacking, dropping Bhuvneshwar over mid-off, but settled down soon, carrying the struggling Tamim. Signs were ominous for India - reminiscent of the World T20 semi-final last year - when Hardik Pandya overstepped when castling Tamim, who would have been out for 12 off 36 then.
Instead Tamim and Mushfiqur batted perfectly against the India spinners. Mushfiqur is a hard man to bowl to for a spinner because his height means that good length balls end up getting cut or pulled. And he has the various sweeps to unsettle them when they start pitching it up. Tamim grew in confidence, too. Every time India strung together dot balls, either of them would hit a boundary. By the 25th over, they had added 111 in 19.1 overs. They had negated the main spinners, and had also taken 28 off Pandya's three overs, which meant India now had a fifth-bowler problem.
That fifth-bowler problem turned out to be their blessing in disguise. Bangladesh believed they should have hit four of the first 11 Jadhav deliveries for boundaries. They were short and they were juicy, but because Jadhav's pace is off, they played with batsmen's rhythm. Three of those were hit straight to fielders, and the fourth was rescued by a diving Bhuvneshwar at cover-point. Had any of these balls reached the fence, you can be pretty sure the 12th ball would have gone differently. Now, though, Tamim went for the slog sweep but the ball never arrived, and when it did it clipped the leg bail. India could sigh in relief: Tamim had taken 58 off the last 46 balls he faced.
Jadhav and Ravindra Jadeja - 25 in his first four overs - now began to rush through the overs. Shakib Al Hasan slowed them down a touch with a cut boundary off Jadeja, but when he went to repeat it in Jadeja's next over, he chose a ball not short enough, and MS Dhoni produced a sensational catch. The coup de grâce of this death by slowness came in the 36th over, when Mushfiqur chipped a dipping full toss from Jadhav straight to short midwicket. Bangladesh since Jadhav's introduction: 10.2 overs, 37 runs, and three wickets to rip the heart out of the batting.
Of the core Bangladesh batting, only Mahmudullah was left. With Mosaddek Hossain, he took Bangladesh to the final 10 overs with five wickets in hand and 207 on the board, but in the final 10 came Bumrah. He had had an ordinary start to this tournament, but, like in the South Africa match, he bowled quick, he bowled smartly, and he cramped Mosaddek for a return catch and then hit the base of Mahmudullah's off stump with what looked like a laser-guided yorker.
The bowlers had done their job once again in what has arguably been their best tournament in adverse conditions. The ball hasn't swung, but you can see - for the first time arguably - that India bowlers have had defensive plans in place, and have executed them, especially Bhuvneshwar and Bumrah. Now it was up to the batsmen to make sure this good work didn't go to waste.
Bangladesh's only chance lay in accessing India's suspect lower middle order early, but on a flat pitch with no deviation off the straight, India's top order took them to school. Every shot hit with ease was a message to the Bangladesh batsmen who had ended at least 50 short. If Dhawan went deep to punch them square, Rohit stood tall and played punch-on drives; if Rohit cut with ease, Kohli unleashed some vintage cover drives that had not quite been coming off in the league stages. It was as if there was a contest within a contest: who will play the most glorious shots. It all worked for India, who ended the chase in 40.1 overs.
Sidharth Monga is an assistant editor at ESPNcricinfo