for f in 20*.txt
do
sed -n '1p' "$f" | cut -d' ' -f3 >> displayStudentInfo.txt
head -3 "$f" | tail -2 >> displayStudentInfo.txt
done
cat displayStudentInfo.txt
rm displayStudentInfo.txt
printf "\n"
Cuando uso este código, me da la mitad de lo que hay dentro del archivo, pero si lo intento cat
puedo ver todos los resultados. Además, ¿cómo puedo enumerar todos los archivos en una línea en lugar de tener las 3 primeras líneas?
Por ejemplo:
ID
Name
Grade
En su lugar, quiero poner todo en una fila:
ID Name Grade
Si uso este código head displayStudentInfo.txt
me da la mitad de lo que hay dentro del archivo:
201700128
GPA: 3.2
Major: Pharmacy
201703451
GPA: 2.2
Major: Political Science
201759284
GPA: 3.4
Major: Marketing
201800082
se supone que son 9 estudiantes diferentes y no sé cómo poner la identificación, la especialización y el GPA en una línea.
Respuesta1
Resolvió su tarea, pero dejó abierta una pregunta que nadie puede responder sin la información requerida. Este sitio sirve como un archivo para otras personas que buscan una respuesta a sus problemas, por lo que es molesto dejar preguntas abiertas como esta.
Aprovecho para demostrar las debilidades de su intento. Por ejemplo, mezclas herramientas sin ventaja:
sed -n '1p' "$f" | cut -d' ' -f3 >> displayStudentInfo.txt
head -3 "$f" | tail -2 >> displayStudentInfo.txt
La primera línea muestra que sabes cómo usar sed
para obtener ciertas líneas, entonces, ¿por qué usas esa combinación torpe y difícil de leer de head
y tail
en la segunda línea? Obviamente sed -n '2p;3p'
haría el mismo trabajo. O puede escribir sed '2,3!d'
para eliminar todos los Me gusta excepto el rango de la línea 2 a la 3.
Por supuesto, sed
también puede extraer el tercer campo de la primera línea como sed -E '1!d;s/([^ ]* ){2}//;s/ .*//'
(eliminar los primeros 2 campos y luego todo lo que está detrás del primer campo), lo cual no es una simplificación en este punto, pero lo hará más fácil si desea combinar las tres partes. a una línea e incluso deshacerse del for
bucle:
sed -sE '1!d;s/([^ ]* ){2}//;s/ .*//;N;N;s/\n/\t/g' 20*.txt
sed
( Sintaxis GNU con opción -s
para tratar archivos por separado y \t
usar una pestaña como separador de campos en la salida). No es necesario utilizar diferentes herramientas y tener archivos temporales, simplemente extraiga el tercer campo, agregue dos líneas más y reemplace las nuevas líneas con pestañas.