Pipes a fichero >
Publicado por iGNASI85 (5 intervenciones) el 07/12/2006 19:33:23
Buenas, tengo unas dudillas; me explico:
Tengo 4 ficheros, cada uno de ellos contiene 10 sudokus. la estructura de los ficheros es:
# Sudoku Easy: #1 (37) [02/12/2006]
-1 -1 5 7 -1 -1 0 3 -1
2 -1 1 6 -1 -1 4 -1 -1
-1 -1 8 -1 1 -1 6 -1 2
-1 2 -1 -1 6 -1 -1 1 0
-1 1 -1 -1 -1 8 3 2 -1
-1 -1 -1 4 -1 1 -1 7 6
1 8 0 -1 3 -1 -1 -1 5
3 5 4 -1 -1 7 -1 -1 -1
7 -1 -1 8 4 5 -1 -1 -1
# Sudoku Easy: #2 (36) [02/12/2006]
...
.
.
.
Y así sucedivamente para los 10 sudokus que hay en los 4 ficheros llamados: Easy-1.asc, Easy-2.asc, Easy-3.asc y Easy-4.asc
Bien, necesito que se resuelvan estos 10 sudokus de los 4 ficheros (40 sudokus en total). Para ello ya tengo un script que lo hace; ahora tengo que crear un archivo de resultados para procesarlos posteriormente con AWK.
Por eso tengo que insertar en un fichero denominado resultados, la cabecera del sudoku que se trata; i.e # Sudoku Easy: #1 (37) [02/12/2006] y luego debajo de esta cabecera el resultado del solver del sudoku.... para ello he hecho este bucle:
for NUM in 1 2 3 4
do
cat Easy-$NUM.asc | grep Sudoku > avore
echo "SUDOKU: $NUM"
for EX in 1 2 3 4 5 6 7 8 9 10
do
cat avore | sed -n '1p' >> resultats
cat avore | sed -e '1d' >> avore
./part2.pl Easy-$NUM.asc $EX -x 8 >> resultats
done
done
Donde hago un recorrido de los 10 sudokus para los 4 ficheros que los contienen.
El primer cat copia todas las cabeceras del sudoku a un fichero denominado avore
Entonces entro dentro del bucle de los ejercicios, lo que hago es copiar la primera línea del fichero anterior al fichero de resultados, entonces borro esta línia (al estilo pila) para que en la primera línia haya la cabecera del 2º sudoku; resuelvo el sudoku y lo copio al fichero resultados.
Mi problema es que en el fichero resultados solo hay la primera cabecera de cada fichero de ejercicios y debajo de ellas los resultados de los 10 sudokus de cada fichero.
Mediante una ejecución al estilo debuggin, es decir, con echo y cats del fichero avore he descubierto que el problema se encuentra en:
cat avore | sed -e '1d' >> avore
y es que en vez de copiar el fichero avore anterior menos la primera línia (que lo hace correctamente si lo ejecuto en la consola), lo que hace es borrarlo o dejarlo en blanco.
Alguna idea de porque se produce este problema? Alguna solución?
Muchas gracias
Tengo 4 ficheros, cada uno de ellos contiene 10 sudokus. la estructura de los ficheros es:
# Sudoku Easy: #1 (37) [02/12/2006]
-1 -1 5 7 -1 -1 0 3 -1
2 -1 1 6 -1 -1 4 -1 -1
-1 -1 8 -1 1 -1 6 -1 2
-1 2 -1 -1 6 -1 -1 1 0
-1 1 -1 -1 -1 8 3 2 -1
-1 -1 -1 4 -1 1 -1 7 6
1 8 0 -1 3 -1 -1 -1 5
3 5 4 -1 -1 7 -1 -1 -1
7 -1 -1 8 4 5 -1 -1 -1
# Sudoku Easy: #2 (36) [02/12/2006]
...
.
.
.
Y así sucedivamente para los 10 sudokus que hay en los 4 ficheros llamados: Easy-1.asc, Easy-2.asc, Easy-3.asc y Easy-4.asc
Bien, necesito que se resuelvan estos 10 sudokus de los 4 ficheros (40 sudokus en total). Para ello ya tengo un script que lo hace; ahora tengo que crear un archivo de resultados para procesarlos posteriormente con AWK.
Por eso tengo que insertar en un fichero denominado resultados, la cabecera del sudoku que se trata; i.e # Sudoku Easy: #1 (37) [02/12/2006] y luego debajo de esta cabecera el resultado del solver del sudoku.... para ello he hecho este bucle:
for NUM in 1 2 3 4
do
cat Easy-$NUM.asc | grep Sudoku > avore
echo "SUDOKU: $NUM"
for EX in 1 2 3 4 5 6 7 8 9 10
do
cat avore | sed -n '1p' >> resultats
cat avore | sed -e '1d' >> avore
./part2.pl Easy-$NUM.asc $EX -x 8 >> resultats
done
done
Donde hago un recorrido de los 10 sudokus para los 4 ficheros que los contienen.
El primer cat copia todas las cabeceras del sudoku a un fichero denominado avore
Entonces entro dentro del bucle de los ejercicios, lo que hago es copiar la primera línea del fichero anterior al fichero de resultados, entonces borro esta línia (al estilo pila) para que en la primera línia haya la cabecera del 2º sudoku; resuelvo el sudoku y lo copio al fichero resultados.
Mi problema es que en el fichero resultados solo hay la primera cabecera de cada fichero de ejercicios y debajo de ellas los resultados de los 10 sudokus de cada fichero.
Mediante una ejecución al estilo debuggin, es decir, con echo y cats del fichero avore he descubierto que el problema se encuentra en:
cat avore | sed -e '1d' >> avore
y es que en vez de copiar el fichero avore anterior menos la primera línia (que lo hace correctamente si lo ejecuto en la consola), lo que hace es borrarlo o dejarlo en blanco.
Alguna idea de porque se produce este problema? Alguna solución?
Muchas gracias
Valora esta pregunta


0