このようなことをすることは可能ですか?
$ 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
awk
、sed
、Perl
は必要ありません。これはシェルで直接簡単に行うことができます。
for i in $(cat foo.txt); do echo "$i"; done
私は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
autosplitモード–入力行を@F
配列に分割します。デフォルトでは空白で分割されます。-e
Perlコードを実行します