列を列ごとに複数の値を持つ行に変換するには?

列を列ごとに複数の値を持つ行に変換するには?

次のデータを含むファイルがあります。

1,2,3 4,5,6 7,8,9 12,22,0

私は4つの列を持つテーブルを作成したいと思いますa,b,c,d。この列にはa最初の列の値があり、b2番目の列にはその値があります。

上記の例では、列は次のようになります。

a   b   c   d
1   4   7   12
2   5   8   22
3   6   9   0

残った何でも。特定の行の列の項目は同じです。ただし、これらの項目は行ごとに異なる場合があります。たとえば、一部の行には列ごとにコンマで区切られた項目が1つしかない場合があり、一部の行には10行がある場合があります。

ベストアンサー1

列の命名方法(ユーザー入力、使用する各列に事前定義された名前など)は不明です。

文字列を列に分割するには、次のものを使用できますsed

echo 1,2,3 4,5,6 7,8,9 12,22,0 | sed -n 'h;:a;g;s/,[^ ]*//gp;g;s/^[^, ]*,//;s/ [^,]*,/ /g;h;ta;p'

ここではsed、文字列全体をバッファにコピーし()、hループの行を繰り返し(:a..)、バッファからコピーした文字列を取得し()、各部分から最初の数字を取得し(first)印刷します()。変更されていない文字列を再検索し、最初の数字(2番目と3番目)を削除してから、変更された文字列をバッファ()に戻します。これは文字列状態にある場合でも継続されます。消えたら、残りを印刷します。tagspsh,p

おすすめ記事