csvの各文字列を複数行に分割する方法

csvの各文字列を複数行に分割する方法

csv行の各文字列を分離したいと思います。

線の例(他の線、同じ概念である可能性があります)

machine23,machine094,machine73,machine83

それではこれを試してみましょう

echo machine23,machine094,machine73,machine83 |awk -F"," '{for(i=1;i<=NF;i++){printf "%-20s", $i};printf "\n"}'

しかし、我々は得る

machine23   machine094  machine7  machine83 

代わりに、次のような予想結果を取得します。

machine23
machine094 
machine7 
machine83 

どんな提案がありますか?

ベストアンサー1

$ echo machine23,machine094,machine73,machine83 | tr ',' '\n'
machine23
machine094
machine73
machine83

または、実際にこれをawkで実行したい場合(おそらくawkでさらに処理したいからです):

$ echo machine23,machine094,machine73,machine83 | \
  awk -F',' -v OFS='\n' '{$1=$1;$0=$0;print}'
machine23
machine094
machine73
machine83

これはきちんとしたawkトリックを使用します。フィールドを変更した後( のようにフィールドがそれと同じに設定されている場合でも$1=$) set すると、$0=$0awk は入力行全体の書式を再指定します。元のフィールド区切り文字(FSこの場合はカンマ)を次のように置き換えます。出力フィールド区切り記号(OFSこの場合は改行文字)。

おすすめ記事