AWK reemplaza la cadena en el archivo con código javascript

Quiero reemplazar una línea javascript constante en awk con un código que leí de un archivo. Ejecutar esto de forma interactiva en la línea de comando en bash funciona:

CUSTOM_CODE=`cat custom_code.txt`
awk -v r=$CUSTOM_CODE '{gsub(/export default function\(\) \{/,r)}1' main.js >  main-patched.js  

El problema es que si coloco estos 2 comandos en un archivo bash, ya no funciona con el siguiente error awk: awk: cannot open myobj (No such file or directory).

Archivos de muestra :

main.js

import asdas form "asdasdsa"
export default function() {

   let a ="asdasd"
}

custom_code.txt

const myobj = {
  aaaa:  bbb.asdasd("12345"),
  aaa2: 1
}

function myfunction(params){
 //1
    // comment
 let var1 ="a"

Answer

Copie/pegue su secuencia de comandos en http://shellcheck.net y explicará el mensaje de error que está recibiendo (pista: siempre cite sus variables de shell ) y más. Es imposible que el código que publicaste funcione en la línea de comandos o en un script.

La forma correcta de hacer esto es leer el nuevo código en una variable awk (no una variable de shell) y luego hacer una coincidencia de cadena y reemplazar (no *sub() ya que eso fallaría &en el nuevo código y necesitaría que lo hicieras) escapar de los metachars regexp) en el archivo principal:

$ awk '
    NR==FNR { new=new sep $0; sep=ORS; next }
    $0=="export default function() {" { $0=new }
    { print }
' custom_code.txt main.js > main-patched.js

$ cat main-patched.js
import asdas form "asdasdsa"
const myobj = {
  aaaa:  bbb.asdasd("12345"),
  aaa2: 1
}

function myfunction(params){
 //1
    // comment
 let var1 ="a"

   let a ="asdasd"
}