Shafali, then, top-scored as India chased down the target in just 14.4 overs.
The win meant India entered the semifinals with an all-win record. This was India’s fourth successive victory in the tournament as the Harmanpreet Kaur-led side consolidated their position on top of the group with eight points.
The 16-year-old Shafali, who was dropped twice in the second and fourth over, hit seven fours and a six in her knock but was unable to reach her maiden fifty for the second time in the tournament, getting run-out in the 11th over.
She had scored 46 against New Zealand in her previous outing.
Kaur and opener Smriti Mandhana again squandered their good starts, departing for 15 and 17, respectively.
Mandhana mistimed the ball to Kavisha Dilhari in the fifth over while the skipper departed while trying to clear the long on fielder in the 10th over.
For Sri Lanka, Udeshika Prabodhani (1/13) and Shashikala Siriwardene (1/42)picked up a wicket each, before the duo of Jemimah Rodrigues (15) and Deepti Sharma (15) sealed the victory.
Earlier, Sri Lanka were dealt a blow when opener Umesha Thimashini (2) tried to go for a big shot off a Deepti Sharma delivery, only to be caught by Rajeshwari Gayakwad in the third over.
In-from skipper Atapattu (33) continued to attack, hitting five fours and a six, and stitched a 30-run partnership with Harshitha Madavi (12).
However, left-arm spinner Gayakwad tightened the screws in the eighth over, bowling a wicket maiden while dismissing Madavi.
The introduction of Radha in the ninth over worked as immediately after hitting a six over deep wicket, the Sri Lankan captain was caught at square leg.
Sri Lanka then suffered a batting collapse as Radha accounted for Hansima Karunaratne (7) and Hasini Perera (7) in her next over. She also dismissed wicket-keeper Anushka Sanjeewani (1).
The Indian spinners dominated the proceedings as besides Radha, Gayakwad (2/18) picked up two wickets, while Deepti (1/16), Shikha Pandey (1/35), and Poonam Yadav (1/20) took one apiece.