J'ai un simple fichier texte nommé "exemple".
Lecture avec la commande du terminal: cat example
Sortie:
abc cdef ghi jk lmnopq rst uv wxyz
Je veux convertir (transformer) sous la forme suivante: (résultat attendu de cat example
)
abc
cdef
ghi
jk
lmnopq
rst
uv
wxyz
Comment puis-je faire cela via la ligne de commande?
(Ceci est seulement un exemple de fichier, je veux convertir la position de Word dans la colonne verticale)
Quelques choix:
Le classique, utilisez tr
:
tr ' ' '\n' < example
Utilisez cut
cut -d ' ' --output-delimiter=$'\n' -f 1- example
Utilisez sed
sed 's/ /\n/g' example
Utilisez Perl
Perl -pe 's/ /\n/g' example
Utiliser la coquille
foo=$(cat example); echo -e ${foo// /\\n}
Essayez la commande ci-dessous
awk -v RS=" " '{print}' file
OR
awk -v RS='[\n ]' '{print}' file
Exemple:
$ awk -v RS=" " '{print}' example
abc
cdef
ghi
jk
lmnopq
rst
uv
wxyz
Explication:
RS (Record seperator) est une variable awk intégrée. Dans la première commande, la valeur donnée à la variable de séparation des enregistrements est l'espace. alors awk rompt la ligne d’impression chaque fois qu’il trouve un espace.
Dans la deuxième commande, la valeur de la variable RS est l'espace ou un nouveau caractère de ligne. Cette commande élimine la ligne vierge supplémentaire apparue lors de l'exécution de la première commande.
Vous pouvez utiliser xargs
,
cat example | xargs -n 1
ou mieux
xargs -n 1 < example
Utilisation d'un oneliner Perl
:
Perl -p -i -e 's/\s/\n/g' example
Il remplacera les espaces et les tabulations par "ENTER" (aka \n
)
Personne n'a posté de python, alors voici ce qui suit:
python -c "import sys;lines=['\n'.join(l.strip().split()) for l in sys.stdin.readlines()];print('\n'.join(lines))" < input.txt
Nous redirigeons le fichier d'entrée dans le flux stdin de python
et le lisons ligne par ligne. Chaque ligne est séparée de sa nouvelle ligne, divisée en mots, puis réunie en une chaîne dans laquelle chaque mot est séparé par une nouvelle ligne. Cette opération est effectuée pour garantir la présence d'un mot par ligne et éviter que plusieurs lignes ne soient insérées s'il y a plusieurs espaces à côté. L'un et l'autre. Nous finissons par nous retrouver avec une liste de chaînes, qui est ensuite à nouveau jointe en une chaîne plus grande, puis imprimée dans le flux stdout. Ce dernier peut être redirigé vers un autre fichier avec la redirection > out.txt
.
Similaire au 'tr' ci-dessus mais avec les ajouts:
Fonctionne également pour les onglets
Convertit plusieurs espaces ou onglets en une nouvelle ligne
tr -s '[:space:]' '\n' < example