Est-il possible de faire quelque chose comme ça:
$ cat foo.txt
1 2 3 4
foo bar baz
hello world
$ awk '{ for(i in $){ print $[i]; } }' foo.txt
1
2
3
4
foo
bar
baz
hello
world
Je sais que tu pourrais faire ça:
$ awk '{ split($0,array," "); for(i in array){ print array[i]; } }' foo.txt
2
3
4
1
bar
baz
foo
world
hello
Mais alors le résultat n'est pas correct.
Découvert moi-même:
$ awk '{ for(i = 1; i <= NF; i++) { print $i; } }' foo.txt
Pas besoin de awk
, sed
ou Perl
. Vous pouvez facilement le faire directement dans Shell:
for i in $(cat foo.txt); do echo "$i"; done
J'utiliserais sed:
sed 's/\ /\n/g' foo.txt
Si vous êtes prêt à utiliser Perl, l'un ou l'autre devrait faire l'affaire:
Perl -lane 'print $_ for @F' foo.txt
Perl -lane 'print join "\n",@F' foo.txt
Ces options de ligne de commande sont utilisées:
-n
boucle autour de chaque ligne du fichier d'entrée, ne pas imprimer automatiquement la ligne-l
supprime les nouvelles lignes avant le traitement et les rajoute après -a
mode autosplit - divise les lignes d’entrée dans le tableau @F
. La valeur par défaut est la division sur les espaces blancs. -e
exécuter le code Perl