Estoy escribiendo un script bash en el que quiero reemplazar el primer dígito si es 0 con 92 y si no hay 0 ni 92, agregue 92 delante de ese dígito y guárdelo en un archivo nuevo.
Cualquier ayuda sería apreciada.
A continuación se muestra mi script bash:
chatarra.sh
#!/bin/bash file=test.txt while IFS=, read -r field1 do echo $field1 | awk '$0*=1'>> test2.txt done < $fileprueba.txt
03333333333 3848123249Rendimiento esperado
923333333333 923848123249Con solo la expansión de parámetros de bash:
$ while IFS= read -r line; do printf '92%s\n' "${line#0}"; done < test.txt 923333333333 923848123249 ${line#0} elimina un cero inicial solo si existe.
https://www.gnu.org/software/bash/manual/bash.html#Shell-Parameter-Expansion
Con sus muestras mostradas, intente seguir el código awk .
awk '{$0=substr($0,1,1)==0?"92" substr($0,2):"92" $0} 1' Input_file Explicación: la explicación simple sería usar la función substr de awk para obtener subcadenas de la línea actual. En el programa principal de awk , reasignar valores a la línea actual ( $0 ) según las condiciones. Verificando la condición si el 1er carácter es 0 , luego haga que el valor de $0 sea 92 y el resto de la línea desde el 2do carácter DE LO CONTRARIO agregue 92 antes $0 . Finalmente, mencionar 1 imprimirá la línea actual editada/no editada.
Suponiendo que este es su archivo de entrada:
cat file 03333333333 92123456789 3848123249 Puedes usar este sed :
sed -E '/^92/!s/0|^/92/' file 923333333333 92123456789 923848123249 detalles del comando sed :
/^92/! haz esto para las líneas que no comienzan con 92/0|^/ : coincide con el primer 0 o la posición inicial de una línea/92/ : Reemplazar con 92 en la posición de inicio Un awk equivalente sería:
awk '!/^92/ {sub(/0|^/, "92")} 1' file