2012-08-13 11 views
12

";"で区切られたフィールドを持つcsvファイルがあります。 8つのフィールドがあり、最初の4列でデータを並べ替えたい(最初の列を1列目、次に2列目など)Bash:最初の4列でCSVファイルをソート

これはLinuxのコマンドラインからどうやって行えますか?

オープンオフィスで試しましたが、私は3列だけを選択できます。

EDIT:データを並べ替えるフィールドのうち、3つのフィールドには数値の文字列と1つの文字列しか含まれていません。どうすればsortコマンドでこれを指定できますか?

答えて

20

試してみてください。

sort -t\; -k 1,1n -k 2,2n -k 3,3n -k 4,4n test.txt 

例:

1;2;100;4 
1;2;3;4 
10;1;2;3 
9;1;2;3 

> sort -t\; -k 1,1n -k 2,2n -k 3,3n -k 4,4n temp3 
1;2;3;4 
1;2;100;4 
9;1;2;3 
10;1;2;3 
+0

ありがとう。 '1,1n'の意味は何ですか? –

+0

数字でソート – Vijay

+0

よろしいですか?だから、フィールド3に文字列が含まれているとしたら、 '-k 3,3d'を辞書順でソートするでしょうか? –

8

sort -kでは、ソートキーを定義できます。 man sortから:だから

-k, --key=POS1[,POS2] 
     start a key at POS1 (origin 1), end it at POS2 (default end of line). 

$ sort -t\; -k1,4 

それを行う必要があります。私がセミコロンをエスケープしたことに注意してください。さもなければ、シェルはそれをステートメントの終わりとして解釈します。

+0

感謝。 'sort'は数値かアルファベット順でソートするかどうかを各フィールドに指定することもできますか? (私の最後の編集を参照してください) –

関連する問題