web-dev-qa-db-fra.com

Supprimer le contrôle Retour et fusionner les lignes dans un fichier texte et limiter le nombre de caractères

Je souhaite supprimer Control Return, fusionner des lignes dans un fichier texte et limiter le nombre de caractères

input.txt contenant:

comment 1
comment 2 
...
comment n 

output.txt faut-il chaine:

comment 1 comment 2 ... commnet n

MAIS le ouput.txt doit être limité à 32 caractères:

comment 1 comment 2 comment 3 co

Puis-je utiliser sed, awk tr ou quelque chose d'autre?

1
Confluentes Info
head -c 32 input.txt | tr '\n' ' ' > output.txt
  • head -c 32 supprime tous les octets sauf les 32 premiers.

  • tr '\n' ' ' remplace tous les caractères de nouvelle ligne par des espaces.

Si vous voulez limiter caractères au lieu de octets en cas de codage sur plusieurs octets, vous pouvez utiliser grep à la place:

tr '\n' ' ' < input.txt | grep -oEe '^.{,32}' > output.txt
1
David Foerster

Awk ira bien. Une façon est:

$ echo -n "comment 1\rcomment 2\r...\rcomment n\r" > input.txt
$ cat input.txt | awk -v FS="" -v RS="" '{for (i=1;i<=32;i++) printf ($i == "\r")? "" : $i}' > output.txt
$ cat output.txt 
comment 1comment 2...comment 

Explication: par défaut, awk traite les entrées ligne par ligne, avec une seule ligne appelée record ; chaque ligne traitée colonne par colonne, avec une seule colonne appelée , champ . Chaque champ est référencé par des variables commençant par 1, par exemple. 1 $, 2 $, 3 $…

Vous modifiez donc le comportement par défaut en définissant F ield S eparator sur "", ce qui fait que awk traite les commandes caractère par caractère. Ensuite, vous définissez R ecord S eparator sur "" afin que vous puissiez faire référence aux caractères de tout le texte à la fois (c’est-à-dire sans écrire de code pour gérer les commandes ligne par ligne) .

Enfin, vous pouvez facilement manipuler des caractères, de sorte que vous passez en boucle sur les champs (c'est-à-dire des caractères) et n'imprimez que lorsque le caractère n'est pas un retour à la ligne.

0
Hi-Angel
tr '\n' ' ' < in.txt | cut -c -32
  • tr '\n' ' ': supprime les nouvelles lignes du texte saisi
  • cut -c -32: limite la sortie à 32 caractères
0
George Udosen