Compte tenu de la saisie du formulaire
XY981743 foobarlkasdf saflkas asfZR!sgfad asdSAD asdsadf SAdfasdf46lk lksad bar foolkasjfdrte
comment puis-je tronquer uniquement la deuxième colonne? Le délimiteur est TAB et la deuxième colonne doit contenir au plus 75 caractères.
text-processing
sed
awk
LoukiosValentine79
la source
la source
awk 'BEGIN{OFS=FS="\t"} {$2=substr($2,1,75)}1' file
Réponses:
Si vous souhaitez imprimer uniquement les 75 premiers caractères de la deuxième colonne (y compris les espaces et en supposant que deux colonnes dans le fichier), vous pouvez faire:
Ou, avec GNU
sed
:Ou:
Alternativement, vous pouvez utiliser
fold
, en lui disant de couper les 91 premiers caractères (c'est 8 pour l'identifiant et 8 autres pour l'onglet), et en imprimant uniquement la première ligne:Si votre fichier peut avoir plus de 2 colonnes et que vous souhaitez seulement tronquer la seconde, vous pouvez le faire (ce qui, comme je viens de le remarquer, n'est qu'une reformulation de la réponse de Stephen ):
Ou (notez que cela se cassera si les 75 premiers caractères de la 2ème colonne peuvent être interprétés comme une expression régulière):
la source
sed
commande utilise également un GNUism (\t
).\t
'est-ce qu'un GNUisme? Sérieusement? Quelle est la manière portable de décrire un onglet alors?\n
(et encore une fois pas à l'intérieur[...]
avec de nombreuses implémentations), aucune sur le RHS.perl
n'a pas de sens. Pensez par exemple à une entrée commeaba\t.*
À l'aide de
awk
, divisez le fichier à l'aide d'onglets et affichez le premier champ dans son intégralité et les 75 premiers caractères (au plus) du second:Comme l'a souligné Fedorqui , vous pouvez gérer des fichiers avec plus de deux champs en remplaçant les champs que vous devez tronquer:
Vous pouvez appliquer le
substr
à plusieurs champs en les bouclant si nécessaire.la source
;
nécessaire?/pattern/ {action} {exception-handling}
par exemple). Maintenant, ce serait extrêmement improbable étant donné que leur omission;
est assez courante.Portable / POSIXly avec
sed
:Ou pour tronquer chaque colonne:
la source
S'il n'y a que 2 colonnes:
{0,75}
signifie sélectionner de 0 à 75 caractères..*
est la section supprimée au-delà du caractère 75.S'il y a 2 colonnes ou plus :
[^\t]*
est la section supprimée au-delà du caractère 75.la source
sed
et que cePOSIXLY_CORRECT
n'est pas dans l'environnement ..