Me gustaría usar el column
comando Unix para formatear un texto. Tengo campos delimitados por pestañas, pero dentro de cada campo también hay espacios. column
delimita en el espacio en blanco (pestañas y espacios). ¿Cómo puedo hacer que la columna solo use pestañas como delimitador?
Intenté especificar la pestaña como delimitador usando:
cat myfile | column -t -s"\t"
fuente
column -t -s $'\t'
como bash parecía pensar que'\t'
significaba ambos\
yt
, pero$'\t'
significa una pestaña literal. Bash apesta$'\t'
pestaña make es el delimitador. Pero estoy bastante seguro de que deboawk -F "\t"
usar una pestaña como delimitador para awk. ¿Por qué funciona eso y no aquí para la columna?Usé lo siguiente (solo funciona si su texto no contiene
|
):Esto simplemente reemplaza las pestañas con tuberías, luego usa columnas con tuberías como delimitadores.
(Hice esto porque no vi nada en la respuesta de Stéphane que funcionara de manera inmediata en la concha de pescado. De lo contrario, la respuesta de Stéphane parece buena).
fuente
Para POSIX,
$'...'
como se conoce como escape ANSI-C, no está definido.En cambio, puedes usar
$(printf '\t')
:$(printf '\011')
se puede usar, ya que011
(representación octal del decimal 9) es el código ANSI para un carácter de tabulación horizontal:Sin embargo, vea los comentarios a continuación de Stéphane Chazelas sobre por qué esto puede no ser coherente en las versiones de shell.
fuente
"$(printf '\t')"
como se muestra en mi respuesta. Tenga en cuenta que$'...'
está previsto incluirlo en la próxima versión principal de la especificación POSIX.$(printf '\t')
POSIX? ¡Gracias!El
-t
es para seleccionar el número de columnas que desea. Dejar esto en blanco no cambia nada. Además, si quieres espacios en blanco después,-s
prueba esto:cat myfile | column -s \t
fuente
column
llena las filas antes de las columnas. Te puede interesarpr