Tengo un requisito en el que, si se cumple una condición específica, necesito duplicar todo el contenido de un archivo en el mismo archivo. Aquí está el archivo:
$ cat in.txt
ip
10.22.1.34
10.22.1.35
Cuando se cumple una condición, por ejemplo.
if [[ d=1 ]]; then
copy the file content
fi
el contenido del archivo debe duplicarse como se muestra a continuación:
ip
10.22.1.34
10.22.1.35
ip
10.22.1.34
10.22.1.35
Respuesta1
Puede almacenar el contenido del archivo en una variable (almacenará nuevas líneas) y luego agregarlo al mismo archivo desde la variable. Solo recuerda usar comillas alrededor de la variable.
x=$(cat test.txt) && echo "$x" >> test.txt
O usando el comando "tee" puede agregar directamente al mismo archivo, no se confunda cuando muestra por primera vez el contenido original de los archivos en la salida estándar, al mismo tiempo ha duplicado el contenido real del archivo.
cat test.txt | tee -a test.txt
Si no desea que la salida de tee sea visible, por supuesto puede hacer esto:
cat test.txt | tee -a test.txt > /dev/null
Respuesta2
Puedes hacer algo como:
cat in.txt > /tmp/tmp.txt && cat /tmp/tmp.txt >> in.txt
Respuesta3
A cat file.txt >> file.txt
debería funcionar: >>
agrega el contenido de stdout al final del archivo especificado
Respuesta4
Puede intentar cat
editar el archivo y luego usar sed para agregarlo. Entonces algo como:
cat in.txt
ip
10.22.1.34
10.22.1.35
d=1
if [ ${d} -eq 1 ]; then
cat in.txt | while read LINE; do sed -i '$a\'"${LINE}" in.txt; done
fi
cat in.txt
ip
10.22.1.34
10.22.1.35
ip
10.22.1.34
10.22.1.35