Entrada dada do formulário
XY981743 foobarlkasdf saflkas asfZR!sgfad asdSAD asdsadf SAdfasdf46lk lksad bar foolkasjfdrte
como posso truncar apenas a segunda coluna? O delimitador é TAB e a segunda coluna deve ter no máximo 75 caracteres.
text-processing
sed
awk
LoukiosValentine79
fonte
fonte
awk 'BEGIN{OFS=FS="\t"} {$2=substr($2,1,75)}1' file
Respostas:
Se você deseja imprimir apenas os primeiros 75 caracteres da segunda coluna (incluindo espaços e assumindo apenas duas colunas no arquivo), você pode:
Ou, com o GNU
sed
:Ou:
Como alternativa, você pode usar
fold
, dizendo para cortar os 91 primeiros caracteres (8 para o identificador e 8 para a guia) e imprimir apenas a primeira linha:Se o seu arquivo pode ter mais de 2 colunas e você deseja apenas truncar a segunda, você pode fazer (o que, como acabei de notar, é apenas uma reformulação da resposta de Stephen ):
Ou (observe que isso será interrompido se os primeiros 75 caracteres da 2ª coluna puderem ser interpretados como uma expressão regular):
fonte
sed
comando também está usando um GNUism (\t
).\t
que é um GNUism? A sério? Qual é a maneira portátil de descrever uma guia então?\n
(e novamente não está presente[...]
com muitas implementações), nenhuma no RHS.perl
faz pouco sentido. Pense, por exemplo, em uma entrada comoaba\t.*
Usando
awk
, divida o arquivo usando guias e produza o primeiro campo completo e os primeiros 75 caracteres (no máximo) do segundo:Conforme apontado por fedorqui , você pode manipular arquivos com mais de dois campos, substituindo os campos que você precisa truncar:
Você pode aplicar a
substr
vários campos fazendo um loop sobre eles, se necessário.fonte
;
necessários?/pattern/ {action} {exception-handling}
por exemplo). Agora, isso seria extremamente improvável, uma vez que omitir essas informações;
é bastante comum.Portably / POSIXly com
sed
:Ou para truncar todas as colunas:
fonte
Se houver apenas 2 colunas:
{0,75}
significa selecionar de 0 a 75 caracteres..*
é a seção removida além do caractere 75.Se houver 2 ou mais colunas:
[^\t]*
é a seção removida além do caractere 75.fonte
sed
e quePOSIXLY_CORRECT
não está no ambiente ..