I have been engaged in migration of a suite of 10,000s of mainframe programs to open systems at financial institutions, written in Cobol and /370 assembler.
In my experience, the difficulties are less the Cobol code. There exist good Cobol compilers for Linux/Unix, both open source and proprietary. Well, very often, preprocessors were used to generate Cobol that must be rewritten (e.g., Columbus Cobol), but even that is doable in such a project with acceptable resources.
The real problem lies in the used infrastructure: JCL jobs (dd is not a replacement for IEBGENER :-)), CICS, DB2 (incompatible to UDB), processing centered on ISAM files, structured record files, and other basic infrastructure that does not exist with similar performance characteristics in our POSIX world.
In addition, documentation that is quite often not up-to-date or missing -- after all, the code is decades old. Thus special interactions or special setup needs are often not known. I even had migrations where we only had object code for a few modules and the source got lost some 30 years ago. We had to disassemble them. (They were written in assembler in first place, so that's not as bad as disassembling optimized C or C++ object code for current processors. /370 binary code is almost readable in hex.)