Entrada dada del formulario
XY981743 foobarlkasdf saflkas asfZR!sgfad asdSAD asdsadf SAdfasdf46lk lksad bar foolkasjfdrte
¿Cómo puedo truncar solo la segunda columna? El delimitador es TAB y la segunda columna debe tener como máximo 75 caracteres.
text-processing
sed
awk
LoukiosValentine79
fuente
fuente
awk 'BEGIN{OFS=FS="\t"} {$2=substr($2,1,75)}1' file
Respuestas:
Si desea imprimir solo los primeros 75 caracteres de la segunda columna (incluidos los espacios y suponiendo que solo haya dos columnas en el archivo), puede hacer lo siguiente:
O con GNU
sed
:O:
Alternativamente, puede usarlo
fold
, diciéndole que corte los primeros 91 caracteres (eso es 8 para el identificador y otros 8 para la pestaña), e imprimiendo solo la primera línea:Si su archivo puede tener más de 2 columnas y solo desea truncar la segunda, puede hacerlo (que, como acabo de notar, es solo una nueva redacción de la respuesta de Stephen ):
O (tenga en cuenta que esto se romperá si los primeros 75 caracteres de la segunda columna se pueden interpretar como una expresión regular):
fuente
sed
comando también está usando un GNUism (\t
).\t
Qué es un GNUismo? ¿Seriamente? ¿Cuál es la forma portátil de describir una pestaña entonces?\n
(y de nuevo no dentro[...]
con muchas implementaciones), ninguna en el RHS.perl
tiene poco sentido. Piense, por ejemplo, en una entrada comoaba\t.*
Usando
awk
, divide el archivo usando pestañas y genera el primer campo completo y los primeros 75 caracteres (como máximo) del segundo:Como señaló fedorqui , puede manejar archivos con más de dos campos reemplazando los campos que necesita truncar:
Puede aplicar el
substr
a múltiples campos haciendo un bucle sobre ellos si es necesario.fuente
;
necesarios?/pattern/ {action} {exception-handling}
por ejemplo). Ahora, eso sería extremadamente improbable dado que omitirlos;
es bastante común.Portable / POSIXly con
sed
:O para truncar cada columna:
fuente
Si solo hay 2 columnas:
{0,75}
significa seleccionar de 0 a 75 caracteres..*
es la sección eliminada más allá de char 75.Si hay 2 o más columnas:
[^\t]*
es la sección eliminada más allá de char 75.fuente
sed
y quePOSIXLY_CORRECT
no está en el medio ambiente ..