J'ai un fichier texte:
a aa aaa b bb bbb c cc ccc
d dd ddd e ee eee f ff fff
g gg ggg h hh hhh i ii iii
j jj jjj
Comment puis-je le traiter et obtenir un fichier à 2 colonnes comme celui-ci:
a aa
aaa b
bb bbb
c cc
ccc d
dd ddd
e ee
eee f
ff fff
g gg
ggg h
hh hhh
i ii
iii j
jj jjj
Ou un fichier à trois colonnes comme celui-ci:
a aa aaa
b bb bbb
c cc ccc
d dd ddd
e ee eee
f ff fff
g gg ggg
h hh hhh
i ii iii
j jj jj
Je préfère obtenir une solution awk mais d'autres solutions sont également les bienvenues.
text-processing
awk
Juste un apprenant
la source
la source
$1
comme chaîne de formatageprintf
?"%s", ...
. Mis à jourawk
commande dans votre autre réponse à cette question, soit dit en passant.Mettez chaque champ sur une ligne et post-éditez.
Chaque champ sur une ligne
tr
grep
sed
ou plus portable:
awk
ou
Columnate
pâte
Pour 2 colonnes:
Pour 3 colonnes:
etc.
sed
Pour 2 colonnes:
Pour 3 colonnes:
etc.
xargs
En tant
xargs
qu'utilisations/bin/echo
pour l'impression, sachez que les données qui ressemblent à des optionsecho
seront interprétées comme telles.awk
pr
ou
colonnes (du package autogen)
Sortie typique:
la source
xargs
ligne ne devrait-elle pas appelerecho
ouprintf
?xargs
appels/bin/echo
par défautxargs
qui ressemble à des options/bin/echo
pose des problèmes ... J'ai ajouté un avertissement.la source
Comme l'a souligné Wildcard, cela ne fonctionnera que si votre fichier est bien formaté, en ce sens qu'il n'y a pas de caractères spéciaux que le shell interprétera comme des globes et que vous êtes satisfait des règles de division des mots par défaut. Si vous ne savez pas si vos fichiers "réussiront" ce test, n'utilisez pas cette approche.
Une possibilité serait d'utiliser
printf
pour le faire commeCela divisera les mots sur le contenu de
your_file
et les appairera et les imprimera avec des onglets entre les deux. Vous pouvez utiliser plus de%s
chaînes de format dans leprintf
pour avoir des colonnes supplémentaires.la source
(remplacer 4 par le nombre de colonnes)
la source
rs
Utilitaire BSD (remodeler):0 2
est des lignes et des colonnes . La spécification0
signifie "calculer automatiquement les lignes à partir des colonnes".la source
Approche par script Python.
L'idée de base ici est d'aplatir tous les mots de votre texte en une seule liste, puis d'imprimer une nouvelle ligne après chaque deuxième élément (c'est-à-dire pour la colonne en deux colonnes). Si vous voulez 3 colonnes, passez
index%2
àindex%3
Exemple de sortie:
Version à trois colonnes (comme indiqué ci-dessus, seulement
index%3 == 0
modifiée)la source