
Ejemplo de mi archivo de texto:
03/Oct/2016:06:39:50-0500,cd/base/0/48/2.png,206,1514
03/Oct/2016:06:39:50-0500,cd/base/1/46/3.png,206,5796
03/Oct/2016:06:39:50-0500,cd/base/2/45/4.png,206,2252
03/Oct/2016:06:39:50-0500,cd/base/3/46/78.png,200,7208
03/Oct/2016:06:39:50-0500,cd/base/4/45/43.png,206,2252
03/Oct/2016:06:39:50-0500,cd/base/5/46/8.png,200,7208
...
En este texto debo reemplazar el número después de base/
seguir estas reglas:
if that_number=0 then that_number=5
if that_number=1 then that_number=6
if that_number=2 then that_number=7
if that_number=3 then that_number=8
if that_number=4 then that_number=9
if that_number=5 then that_number=10
Resultado deseado:
03/Oct/2016:06:39:50-0500,cd/base/5/48/2.png,206,1514
03/Oct/2016:06:39:50-0500,cd/base/6/46/3.png,206,5796
03/Oct/2016:06:39:50-0500,cd/base/7/45/4.png,206,2252
03/Oct/2016:06:39:50-0500,cd/base/8/46/78.png,200,7208
03/Oct/2016:06:39:50-0500,cd/base/9/45/43.png,206,2252
03/Oct/2016:06:39:50-0500,cd/base/10/46/8.png,200,7208
¿Alguna idea de cómo puedo hacer eso?
Respuesta1
En Perl es fácil hacer coincidir el contexto.yhaz la suma:
perl -pe 's,base/\K\d+,$& + 5,e' input_file
Hacemos coincidir cualquier cosa con el formato , nos olvidamos de la primera parte (hasta ) y reemplazamos el resto con lo que coincida ( ) más 5. Hace que el reemplazo sea una expresión Perl en lugar de solo una cadena.base/<numbers>
\K
$&
e
Respuesta2
awk
Puede hacer uso del hecho de que es una +5
operación en cada número:
awk -F'/' '{$5+=5 ; print}' OFS='/' input_file
Cuando se utiliza /
como delimitador de campo para entrada ( -F'/'
) y salida ( OFS='/')
, respectivamente, se debe agregar 5 al campo número 5.
Tenga en cuenta que las posiciones y los números de las barras son cruciales aquí.
Respuesta3
sed
trabajaría:
sed \
-e 's/base\/1/base\/6/' \
-e 's/base\/2/base\/7/' \
-e 's/base\/3/base\/8/' \
-e 's/base\/4/base\/9/' \
-e 's/base\/5/base\/10/' \
-e 's/base\/0/base\/5/'
Creo que tienes que poner el caso "base/0" al final; de lo contrario, el caso 5 -> 10 también se activa.