Aquí es la entrada(ejemplo):
[email protected].com|com.emailclient.account
[email protected].com|com.socialsite.auth.account
Estoy tratando de lograr esto:
Emailclient [email protected].com
Socialsite [email protected].com
Si puedo usar AWK como este:
cat foo | awk 'BEGIN{FS="|"} {print $2 " " $1}'
se mete hasta la salida por la superposición de campo 1 en la parte superior de campo 2.
Cualquier consejos/sugerencias? Gracias.
Un par de consejos generales (además de las DOS finales de línea de la revista):
cat
es para concatenar los archivos, no es la única herramienta que puede leer archivos! Si un comando no lee los archivos, a continuación, utilizar la redirección comocommand < file
.Puede establecer el separador de campo con el
-F
opción así que en lugar de:Tratar:
Esta es la salida:
Para obtener la salida deseada, usted puede hacer una variedad de cosas. Probablemente me
split()
el segundo campo:Finalmente para obtener el primer carácter de convertir a mayúsculas es un poco de un dolor en
awk
, ya que no tienen un bonito construido enucfirst()
función:Si quieres algo más conciso (aunque se le da una sub-proceso) usted podría hacer:
Uso de un punto o de una tubería como el separador de campo:
da:
.co.uk
,.cam.ac.uk
, ect.. se vuelve desordenado.El awk es aceptar. Supongo que el archivo es de un de sistema de windows y tiene un CR (^m ascii 0x0d) en el extremo de la línea.
Esto hará que el cursor para ir al inicio de la línea después de $2.
Uso dos2unix o vi con
:se ff=unix
para deshacerse de la CRs.Tal vez su archivo contiene CRLF terminator. Cada una de las líneas seguidas por \r\n.
awk
reconoce la$2
en realidad$2\r
. El\r
significa ir al inicio de la línea.{print $2\r$1}
imprimirá$2
en primer lugar, a continuación, volver a la cabeza, a continuación, imprimir$1
. De modo que el campo 2 se le superpone el campo 1.