次のファイルがあります。
Y10 122.894054 7.653405
B3 124.406526 8.281803
B3' 125.000684 8.389677
A11 102.801917 9.288624
A11' 127.661564 8.216719
D4 117.182791 7.418388
次のように、最初の列を数字でソートしたいと思います。
B3 124.406526 8.281803
B3' 125.000684 8.389677
D4 117.182791 7.418388
Y10 122.894054 7.653405
A11 102.801917 9.288624
A11' 127.661564 8.216719
このコマンドを使用しますが、機能しません。
sort -k1,23 -k1n junk
ベストアンサー1
最初の数字の前に一意の区切り文字(「#」など)を一時的に追加します。
sed 's/^\([^0-9]*\)/\1#/' junk | sort -t '#' -k 2n,2 | tr -d '#'
これは一般的なケースで、最初の数字の前に「#」が含まれていないテキストファイルの最初の数字をソートします。
必要に応じて、よりクールな区切り文字を使用することもできます。
SEP=`printf '\02'`
sed "s/^\([^0-9]*\)/\1$SEP/" junk | sort -t "$SEP" -k 2n,2 | tr -d "$SEP"