web-dev-qa-db-ja.com

カンマ区切りの行を1列に変換します

基本的に/ etc/groupのユーザーのリストがあります。基本的に、その行を1つの列にフォーマットしたいので、ユーザーが必要です。したがって、フィールドが次のようになっている場合:

bob,john,jane,sam,joyce

それならこんな感じにしたいです

bob
john
jane
sam
joyce

私は反対の方法を知っていますが、このタイプは知りません。

4
unixpipe

あなたはsedでこれを行うことができます:

sed 's/,/\n/g'

これにより、出現するすべての,が改行に置き換えられます。 gは、sedに、最初のオカレンスだけでなく、行内のすべてのオカレンスを置き換えさせます。

4
user2313067

提案されたタグを使用して回答するには:

bash:

$ IFS=, read -a names <<< "bob,john,jane,sam,joyce"
$ printf "%s\n" "${names[@]}"
bob
john
jane
sam
joyce

awk:

$ echo "bob,john,jane,sam,joyce" | awk -F, -v OFS="\n" '{$1=$1; print}'
bob
john
jane
sam
joyce

$1=$1ビットは、出力フィールドセパレーターを使用して現在のレコードを書き換えるawkイディオムです。これは、一部のフィールドが変更されない限り発生しません。

1
glenn jackman

これは、vimで検索して置換することで実行できます。

:%s/,/\r/g

this 質問を参照してください...

0
Questionmark

いくつかのオプション:

tr

tr ',' '\n' < [input file] > [output file]

trは、標準入力をフィルタリングし、最初の引数から出現するすべての文字を2番目の要素からの一致する文字に置き換えてから、標準出力に出力するツールです。

vim/ex(これはスクリプトで機能します):

vim -c "%s/,/\r/g" -c "wq" [input file]

-cオプションは、vimに次のexコマンドを実行するように指示します(vimを通常使用するときに:の後に入力するものと同じです)。

そして、誰かがすでに私を殴って殺した。

0
8bittree

Awkを使用したい場合( AWKをOFSで区切ってすべてのフィールドを印刷する と同様):

echo "bob,john,jane,sam,joyce" | awk  'BEGIN {FS=","; OFS="\n"} {$1=$1; print $0}'
0
mpromonet