縦ではなく横に並べる必要がありますが、縦sort
作業用に設計されたようです。たとえば、次の3つの行があります。
banana/orange/apple/mango
potato/tomato/onion/garlic
chair/table/carpet/window
すべての行は同じ数の列を持ち、で区切ります/
。最初の行の列をアルファベット順に並べ替えたいです。だからそれは次のようになります:
apple/banana/mango/orange
onion/potato/garlic/tomato
carpet/chair/window/table
これは次のようによりよく視覚化できます。
つまり、スプレッドシートの列に基づいて並べ替えるのと同じです。
ベストアンサー1
awk
GNUを使用すると、内部設定で配列が移動される順序を指定できます。この場合、値の昇順で配列を強制的に巡回するように設定します。sorted_in
PROCINFO
@val_str_asc
次に、最初の行を配列に分割しa
、最後に各行に対して配列を繰り返し、検索時にキーに対応するフィールドを印刷します。
awk -F'/' 'BEGIN{PROCINFO["sorted_in"]="@val_str_asc"};
FNR == 1{n = split($0, a)};
{x=0; for (k in a) printf "%s%s", $k, ++x == n? "\n": FS}' file
apple/banana/mango/orange
onion/potato/garlic/tomato
carpet/chair/window/table
またはpython
from __future__ import print_function
with open('file') as f:
keys = next(f).rstrip('\n').split('/')
print(*sorted(keys), sep='/')
for line in f:
g = (m for l, m in sorted(zip(keys, line.rstrip('\n').split('/'))))
print(*g, sep='/')
apple/banana/mango/orange
onion/potato/garlic/tomato
carpet/chair/window/table