2012-07-07 10 views
14

Cuando uso de terminales para encontrar cada puesto de trabajo que se ha trabajado en últimas veinticuatro horas me sale un archivo de texto con líneas como esta:¿Cómo puedo poner pestañas en los archivos de texto de la Terminal?

ABC 12345 Trabajo trabajado en FECHA

DEF 67890 Otro trabajo en la FECHA

GHI 10112 Trabajo final sobre FECHA

Este archivo de texto puede ser de hasta cientos de líneas. Tengo que insertar todos estos datos en una tabla en Microsoft Excel. Para hacer mi vida más fácil, me gustaría descubrir cómo agregar una pestaña en cada línea, después de los números.

Algo como esto:

echo "ABC 12345 <tab> Job Worked on DATE" >> jobs.txt 
echo "DEF 67890 <tab> Another Job on DATE" >> jobs.txt 
echo "GHI 10112 <tab> Final Job on DATE" >> jobs.txt 

¿Cómo puedo lograr esto?

+0

Probablemente no quiera espacios que rodeen th e tabuladores –

+0

No necesita ser un carácter de tabulación, en MS Excel puede elegir el carácter de separación para importar, puede elegir algo visible como ',' o ';' y simplemente edite el archivo con esos caracteres. – pizza

Respuesta

32

Use echo -e con \ t para una pestaña. De esta manera:

echo -e "ABC 12345 \t Job Worked on DATE" >> jobs.txt 
+1

¿Qué hace la bandera -e? Cuando hago eco, solo me da una bandera -n. – W3Geek

+2

@ W3Geek: depende de la versión de 'echo' que esté utilizando. El comando 'echo' integrado de bash reconoce' -e', lo que permite la interpretación de ciertos caracteres de escape de barra invertida, incluyendo '\ t' para la pestaña. Pero no todas las versiones de 'echo' hacen esto. El comando 'printf' es una mejor alternativa, pero dado que ya tienes la información como texto, es incluso mejor transformarla usando' sed', 'awk', o algo similar. –

+0

Bien, veo cómo funciona la bandera -e. =) Sin embargo, no apareció en mi 'man echo'. No entiendo lo que hacen los comandos sed o awk. – W3Geek

5

Puede pulsar Ctrl-V Tab para escribir una ficha en bruto.


También puede utilizar $'...' sintaxis de la c-secuencia:

echo $'ABC 12345 \t Job Worked on DATE' >> jobs.txt 
+1

Sí, pero como OP tiene todos los datos como texto, y solo necesita transformarlos, volver a escribirlos no sería * el mejor enfoque. –

+0

Tienes razón @KeithThompson. Este no sería el mejor enfoque para lo que estoy haciendo. Elegí la publicación anterior porque su era el enfoque más simple. – W3Geek

1

append una ficha para el segundo campo:

awk '{$2 = $2 "\t"; print}' inputfile > outputfile 

similares, pero utilizando una expresión regular:

sed 's/[[:digit:]]\+/&\t/' inputfile > outputfile 
+0

¿Qué hacen los comandos 'awk' y 'sed'? – W3Geek

+0

@ W3Geek: Ambos son filtros de transformación de texto. 'awk' en particular es un lenguaje de programación completo (y' sed' podría decirse que también). Es imposible explicarlos completamente en un comentario. Pruebe 'man sed' y/o' man awk' si su sistema tiene el comando 'man', o haga una búsqueda en Google o Wikipedia. –

+0

Ese comando 'sed' no funciona, al menos no para mí (GNU sed 4.2.1). 'sed' no reconoce expresiones regulares extendidas (específicamente el calificador' + ') por defecto.Y si lo hiciera, el comando 's ///' reemplazaría * una secuencia de dígitos por un carácter de tabulación; desea * agregar * un carácter de tabulación. –

Cuestiones relacionadas