Jordan Walker collected two hits and a run, while Jose Fermin drove in the winning tally with a sacrifice fly in the fifth as the St. Louis Cardinals held on for a 3-2 win over the Boston Red Sox.