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.

InformationsquelleAutor Sazzy | 2013-03-24

4 Comentarios

  1. 59

    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 como command < file.

    Puede establecer el separador de campo con el -F opción así que en lugar de:

    cat foo | awk 'BEGIN{FS="|"} {print $2 " " $1}' 

    Tratar:

    awk -F'|' '{print $2" "$1}' foo 

    Esta es la salida:

    com.emailclient.account [email protected].com
    com.socialsite.auth.accoun [email protected].com

    Para obtener la salida deseada, usted puede hacer una variedad de cosas. Probablemente me split() el segundo campo:

    awk -F'|' '{split($2,a,".");print a[2]" "$1}' file
    emailclient [email protected].com
    socialsite [email protected].com

    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 en ucfirst() función:

    awk -F'|' '{split($2,a,".");print toupper(substr(a[2],1,1)) substr(a[2],2),$1}' file
    Emailclient [email protected].com
    Socialsite [email protected].com

    Si quieres algo más conciso (aunque se le da una sub-proceso) usted podría hacer:

    awk -F'|' '{split($2,a,".");print a[2]" "$1}' file | sed 's/^./\U&/'
    Emailclient [email protected].com
    Socialsite [email protected].com
    • Gracias, que fue es de mucha ayuda!
  2. 1

    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.

    • cada línea termina con 0x0d0a, es que era lo que significaba? Sería el corte de estos valores hexadecimales de resolver el problema? Thx
    • El 0a está bien, acaba de deshacerse de la 0d
    • Gracias! La adición de la siguiente en la canalización ordenada el problema: | sed ‘s/\x0d//g’ |
  3. 0

    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.

    • Bienvenido a Desbordamiento de Pila, SleepyProgrammer! Te recomiendo que para añadir más detalles, si usted puede. Este post parece un comentario y podría ser eliminado…

Dejar respuesta

Please enter your comment!
Please enter your name here