CSVファイルの要素の並べ替え

CSVファイルの要素の並べ替え

次のように、行ごとに7つの数字を持つCSVファイルがあります。

1083,20,28,42,23,10,43
1084,20,5,29,59,40,33
1085,39,50,21,12,40,55
1086,45,4,6,23,10,2
1087,36,46,28,32,3,20

最初の数字(列1)を維持し、ファイルが次のように見えるように列2から7まで並べ替えたいと思います。

1083,10,20,23,28,42,43
1084,5,20,29,33,40,59
1085,12,21,39,40,50,55
1086,2,4,6,10,45,23
1087,3,20,28,32,36,46

awkどうすればこれを行うことができますかsed

ありがとう

ベストアンサー1

そしてperl

perl -F, -lape '$_ = join ",", shift @F, sort {$a <=> $b} @F' < input.csv

GNUの使用awk:

gawk -F, '
  {
    split($0, a)
    printf "%s", a[1]
    delete a[1]
    n = asort(a)
    for (i = 1; i <= n ; i++) printf "%s", FS a[i]
    print ""
  }' < input.csv

またはjoin.awk図書館を利用してください(@WeijunZhouに感謝します)

gawk -i join -F, -v OFS=, '
  {
    split($0, a)
    first = a[1]
    delete a[1]
    n = asort(a)
    print first, join(a, 1, n, OFS)
  }'

おすすめ記事