Ответ 1
Нашел сам:
$ awk '{ for(i = 1; i <= NF; i++) { print $i; } }' foo.txt
Можно ли сделать что-то вроде этого:
$ 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
Я знаю, что вы могли бы это сделать:
$ awk '{ split($0,array," "); for(i in array){ print array[i]; } }' foo.txt
2
3
4
1
bar
baz
foo
world
hello
Но тогда результат не в порядке.
Нашел сам:
$ awk '{ for(i = 1; i <= NF; i++) { print $i; } }' foo.txt
Я бы использовал sed:
sed 's/\ /\n/g' foo.txt
Если вы открыты для использования Perl, любой из них должен сделать трюк:
perl -lane 'print $_ for @F' foo.txt
perl -lane 'print join "\n",@F' foo.txt
Используются следующие параметры командной строки:
-n
обведите вокруг каждой строки входного файла, не печатайте автоматически строку-l
удаляет новые строки перед обработкой и добавляет их обратно-a
автоматический режим - разделение входных строк на массив @F
. По умолчанию разбивается на пробелы.-e
выполнить код perlНет необходимости в awk
, sed
или perl
. Вы можете легко сделать это прямо в оболочке:
for i in $(cat foo.txt); do echo "$i"; done