Cambiar el contenido de un archivo desde el nombre del archivo

Cambiar el contenido de un archivo desde el nombre del archivo

Quiero escribir un script en el que el contenido del archivo cambie según su nombre de archivo.

Supongamos que tengo un archivo llamado ABC_20161027220153.txty el contenido del archivo es como

2000|2000_ABC|04|||0000000000||

Quiero crear un script en el que se cambie el contenido del archivo como se muestra a continuación.

2000|2000_ABC|04|20161027|27.10.2016 22.01.53|0000000000||

¿Cómo puedo hacer esto?

Respuesta1

Su secuencia de comandos puede tomar el nombre del archivo como argumento de la línea de comando. Luego puede llamar a este argumento en el script con la variable $1 y manipular esa variable como mejor le parezca. P.ej

#!/bin/bash
# myscript.sh

year=`echo $1 | cut -c 5-8`
month=`echo $1 | cut -c 9-10`
day=`echo $1 | cut -c 11-12`

# Etc...
# Then...

repstr=`echo "$year$month$day|$day.$month.$year $hour.$minute.$second"`

sed -i "s/|||/$repstr/" $1

Luego llama al script así:

./myscript.sh ABC_20161027220153.txt

Respuesta2

#!/bin/sh

find . -name 'ABC_*.txt' | while read file; do
    res=$( echo "$file" | 
    sed -r 's#\S*_(....)(..)(..)(..)(..)(..).*#\1\2\3|\3.\2.\1 \4.\5.\6#' )

    col4=${res%|*}
    col5=${res#*|}

    sed -r -i.bak '
    s#(.*)\|(.*)\|(.*)\|(.*)\|(.*)\|(.*)\|(.*)\|#\1|\2|\3|'"$col4"'|'"$col5"'|\6|\7|#' \
    "$file"
done

información relacionada