excelなどでは普通に行える文字列のソート。
shellコマンドでいくつかの列を順にたどってソートするにはkオプションを使うらしい。
例えば
AT1G01000.1:139:G:A AT1G01000.1:274:T:G AT1G01000.1:1033:T:A AT1G01000.1:1034:T:C AT1G01000.1:1027:C:A AT1G01000.1:284:C:A AT1G01000.1:288:T:A AT1G01000.1:1005:T:C AT1G01000.1:1010:G:A AT1G01000.1:1092:G:A AT1G01000.1:141:A:G AT1G01010.1:138:T:G AT1G01010.1:147:A:G AT1G01010.1:284:A:C AT1G01010.1:314:C:T AT1G01010.1:293:G:A AT1G01010.1:317:G:A
このような遺伝子のSNPリストを遺伝子コード→ポジションの順でソートしたい場合、
まず行の区切りを指定するために
-t ":"
を入れる。よく一緒にパイプで繋いで使うcut では -d ":" のようになるのでややこしいが、-tだ。
次に並び順を1列目の遺伝子コードで行うため
-k 1
と入れる。
続いて2列目のポジションでソートするには
-k 2
と続けたいところだが、ここの書式は1列目のオプションと合わせて
-k 1,1 -k 2
となるらしい。
更に、そのままだとASCIIで並べ替えるので、3桁と4桁の数字が混ざっていると一番上の桁の数字からソートしてしまい、数値順にならないので
-k 1,1 -k 2n
とやることになるらしい。