
I tengo dos columnas (campos) en mi archivo de texto. Estoy tratando de insertar ‘|‘entre dos y cree una tabla HTML basada en el archivo actualizado. Mi archivo de entrada de muestra
FOO Esta es una descripción
BAR Otra descripción para bar
TEXT Otra descripción para TEXT
Así que corrí awk '"; $ 1 = ""; print 'entrada> salida pero el comando de impresión está agregando una nueva itinerario:
FOO |
Esta es una descripción
BAR |
Otra descripción para bar
TEXTO |
Otra descripción para TEXT
¿Hay alguna forma de decirle a awk que no imprima una nueva itinerario y cree el archivo? Esto es lo que quiero para poder crear una tabla HTML final basada en ‘|‘:
FOO | Esta es una descripción
BAR | Otra descripción para bar
TEXT | Otra descripción para TEXT
Usamos print en awk para mostrar datos, incluidas las variables. Sin confiscación, siempre agregará una nueva itinerario por defecto. Para evitar esto, usamos printf () o spintf () para forzar a awk a no imprimir una nueva itinerario
Use printf () cuando desee awk sin imprimir una nueva itinerario
La sintaxis es la subsiguiente para mostrar una sujeción / palabras / variable construida a partir de lista-expr según formato:
printf "format", var1 sprintf "format", var1 printf "%s", $var_a printf "%d", $var_b printf "%.2fn", $1
AWK printf duplica la función de la biblioteca printf C escribiendo en screen / stdout. Las especificaciones completas del formato ANSI C se reconocen con conversiones:
- %C : Un tipo de char sin firmar
- %D : El argumento int se convierte a notación quebrado con signo
- %mi : El argumento doble se redondea y se convierte en el estilo [-]d.ddde ± dd
- %MI : Una conversión E usa la letrilla E (en sitio de e) para introducir el indicativo. El indicativo siempre contiene al menos dos dígitos; si el valencia es cero, el indicativo es 00
- %F : El argumento doble se redondea y se convierte a notación quebrado en el estilo [-]ddd.ddd
- %gramo : El argumento doble se convierte en estilo f o e. La precisión especifica el número de dígitos significativos
- %I : El argumento int se convierte a notación quebrado con signo.
- % o : El argumento int sin signo se convierte en octal sin signo.
- %s : La cuerda
- % u : Un quebrado sin signo
- %X : Un hexadecimal sin signo
- %X : Un hexadecimal sin signo
- %% : A ‘%‘ está escrito
- calificadores de conversión h y l : Una subsiguiente conversión de enteros corresponde a un argumento int corto o int corto sin signo usando el calificador h. Una subsiguiente conversión de firme corresponde a un argumento long int o unsigned long int cuando se usa el calificador l.
awk sin imprimir nueva itinerario
Probemos awk de la subsiguiente modo:
awk '",$1; $1=""; print' input.txt awk '",$1; $1=""; print' input.txt > output.txt cat output.txt
los $ 1 = ""; imprimir; saltará el primer campo e imprimirá el resto de la itinerario.
awk – imprimiendo el valencia de la columna sin una nueva itinerario usando ORS
AWK tiene muchas variables integradas. Uno de ellos es SRO. Usamos ORS para terminar cada registro en la salida e inicialmente lo configuramos en » n» (nueva itinerario). En otras palabras, podemos modificar ORS y suprimir el uso de printf o sprintf en nuestro awk de la subsiguiente modo para evitar mostrar una nueva itinerario:
awk 'BEGIN{ORS=""}"; $1=""; print ; print "n"' input.txt awk 'BEGIN{ORS=""}"; $1=""; print ; print "n"' input.txt > output.txt
Por supuesto, podemos suprimir awk y usar una combinación de tr y cut incluso. Perl es otra opción. Pero recuerde, awk creado para este tipo de trabajo. Por lo tanto, sugeriría seguir con awk.
Generando salida final a formato HTML usando AWK
Ahora todo lo que tiene que hacer es escribir el subsiguiente AWK:
awk -F'|' 'BEGIN{ print "<table>"} { print "<tr><td>" $1 "</td><td>" $2 "</td></tr>"} END{ print "</table>"}' output.txt awk -F'|' 'BEGIN{ print "<table>"} { print "<tr><td>" $1 "</td><td>" $2 "</td></tr>"} END{ print "</table>"}' output.txt > tmp.html cat tmp.html
Conclusión
En este tutorial rápido, aprendimos cómo usar awk para no imprimir una nueva itinerario usando la exposición printf / sprintf o la variable awk de ORS. Asimismo es posible combinar todo en un solo AWK, que se deja como prueba a los lectores. Consulte la página de manual de awk:man awk