「example」という名前の簡単なテキストファイルがあります。
端末コマンドによる読み取り:cat example
出力:
abc cdef ghi jk lmnopq rst uv wxyz
私はconvert(transform)を次の形式にしたい:(cat example
からの期待される出力)
abc
cdef
ghi
jk
lmnopq
rst
uv
wxyz
コマンドライン経由でこれを行うにはどうすればよいですか?
(これは単なるサンプルファイルです。convert縦列でのWordの位置)
いくつかの選択肢:
クラシック、tr
を使用:
tr ' ' '\n' < example
cut
を使用します
cut -d ' ' --output-delimiter=$'\n' -f 1- example
sed
を使用します
sed 's/ /\n/g' example
Perl
を使用します
Perl -pe 's/ /\n/g' example
シェルを使用する
foo=$(cat example); echo -e ${foo// /\\n}
以下のコマンドを試してください
awk -v RS=" " '{print}' file
OR
awk -v RS='[\n ]' '{print}' file
例:
$ awk -v RS=" " '{print}' example
abc
cdef
ghi
jk
lmnopq
rst
uv
wxyz
説明:
RS(レコードセパレーター)は、組み込みのawk変数です。最初のコマンドでは、Record separator変数に指定された値はスペースです。そのため、awkは、スペースが見つかるたびに行の印刷を中断します。
2番目のコマンドでは、RS変数に指定された値はスペースまたは改行文字です。このコマンドは、最初のコマンドの実行中に表示される余分な空白行を削除します。
xargs
を使用できます。
cat example | xargs -n 1
または、より良い
xargs -n 1 < example
Perl
onelinerの使用:
Perl -p -i -e 's/\s/\n/g' example
スペースとタブを「ENTER」(別名\n
)に置き換えます
誰もpythonを投稿していないので、ここにそれがあります:
python -c "import sys;lines=['\n'.join(l.strip().split()) for l in sys.stdin.readlines()];print('\n'.join(lines))" < input.txt
入力ファイルをpython
のstdinストリームにリダイレクトし、1行ずつ読み取ります。各行の末尾の改行は削除され、単語に分割され、各単語が改行で区切られた1つの文字列に再結合されます。これは、行ごとに1つの単語があり、お互い。最終的には文字列のリストになり、それが再び大きな文字列に結合され、stdoutストリームに出力されます。後で> out.txt
リダイレクトを使用して別のファイルにリダイレクトできます。
上記の 'tr'に似ていますが、追加されています:
タブでも機能します
複数のスペースまたはタブを1つの改行に変換します
tr -s '[:space:]' '\n' < example