Linuxでテキストファイルの文字列ソートの方法は?

このQ&Aのポイント
  • Linuxでテキストファイルの文字列ソートをする方法について教えてください。
  • フィールドごとに区切られたテキストファイルの文字列を昇順に並び替える方法について教えてください。
  • sortコマンドを使用してテキストファイルの文字列ソートを行う方法について教えてください。
回答を見る
  • ベストアンサー

linuxでテキストファイルの文字列ソートをしたいと思っています。

linuxでテキストファイルの文字列ソートをしたいと思っています。 文字列 aaaaaa:rrrrr:100:xxxxxxxxx:yyyyyyyyyy aaaaaa:sssss:003:xxxxxxxxx:yyyyyyyyyy aaaaaa:eeeee:050:xxxxxxxxx:yyyyyyyyyy aaaaaa:ccccc:020:xxxxxxxxx:yyyyyyyyyy aaaaaa:ddddd:099:xxxxxxxxx:yyyyyyyyyy aaaaaa:eeeee:080:xxxxxxxxx:yyyyyyyyyy aaaaaa:fffff:002:xxxxxxxxx:yyyyyyyyyy 3番目のフィールド(数字)をキーに昇順に並び変えたいのですが、どのようにすれば並び変えれるでしょうか? sortコマンドでは"空白"では行えましたが、":"が区切りですと、できませんでした。 なるべくシンプルに行いたいと思っています。 よろしくお願い致します。

  • s1756
  • お礼率65% (108/166)

質問者が選んだベストアンサー

  • ベストアンサー
  • notnot
  • ベストアンサー率47% (4848/10262)
回答No.6

セパレータは -t で指定します。 sort -t: -k 3 または、 sort -t: -n -k 3

その他の回答 (5)

  • dev_null
  • ベストアンサー率67% (37/55)
回答No.5

trコマンドで";"をスペースに変換させてsortコマンドにあたえればいいのでは? $ cat filename | tr ":" " " | sort ...

  • foobar
  • ベストアンサー率44% (1423/3185)
回答No.4

#1です。 man sort してみると、、 -k, --key=POS1[,POS2] start a key at POS1, end it at POS2 (origin 1) と、(GNUの?現行の?)sortでkオプションを使うときにはfieldの番号は1からのようです。 (たしかに、以前使ってた unix機 sort +nでfield指定するときには、0起点でした。)

  • seiiiichi
  • ベストアンサー率41% (79/190)
回答No.3

$ sort -n -k 2 -t : ファイル名 確か、フィールド番号は0からスタートだったような。

  • yasuya
  • ベストアンサー率16% (35/216)
回答No.2

-tオプション付けるとか? -t separator :ソートの区切りとしてseparatorを使用する。 separatorが指定されない場合は空白 「sort -t : +2 ファイル名」 試せる環境じゃないから、確実じゃないけど・・・ :は、":"で括るのか、そのままで良いかは、試して下さい。

  • foobar
  • ベストアンサー率44% (1423/3185)
回答No.1

sort -n -t : -k 3 でできそうな気がします。 -tが区切りの指定。

関連するQ&A

  • 【Excel2007】A列の値がB列に存在しないことを確認したい

    いつもお世話になっております。 Excel2007を使用しております。 次のような一覧があります。 A列   B列 aaaaa aaaaa bbbbb bbbbb ccccc ddddd ddddd fffff eeeee A列にはあるが、B列にはない値を取得したいと 思っております。 この例であれば、「ccccc」と「eeeee」を抜き出したいのです。 何か関数などで抜き出す方法がございましたら、 教えて頂けませんか? A列、B列ともに2000行程度あるため、調査に苦労しています。 ぜひよろしくお願いいたします。

  • Rubyで文字列の抽出

    Rubyで質問があります。 AAAA;BBBB、CCCCC=DDDDD という文字列が存在したときに、 AAAAとBBBBとCCCCCとDDDDDの文字列を取得したいです。 splitは、特定の区切り文字しか対応していないようなので、複数の区切り文字を指定出来る方法はありませんでしょうか? 確かにsplitで地道に処理するより もうちょっと効率的な方法はないか知りたいです。

  • 任意の複数文字列(複数パターン)を一括で削除できるフリーソフト

    任意の複数文字列(複数パターン)を一括で削除できるフリーソフトを探しています。 これだけではわかりにくいので、例に挙げてみます。 下記のステップ1からステップ3までの処理を簡単に実現したいのです。 ステップ1、 これら複数文字列(一例)から------------------------------------------ aaaaa.com bbbbb.com ccccc.com ddddd.net eeeee.com fffff.biz ggggg.com hhhhh.net iiiii.com jjjjj.com ---------------------------------------------------------------------- ステップ2、 これら複数文字列(一例)を削除---------------------------------------- ddddd.net ggggg.com iiiii.com ---------------------------------------------------------------------- ステップ3、 ステップ1からステップ2を削除、ステップ3(一例)が残りました-------- aaaaa.com bbbbb.com ccccc.com eeeee.com fffff.biz hhhhh.net jjjjj.com ---------------------------------------------------------------------- メモ帳の置換で「検索する文字列」をステップ2のもの、「置換後の文字列」 を空白にすれば1つ1つ削除が可能ですが、毎回多量に削除対象が出てくると 手作業ではとても大変です。 そこで、ステップ2の削除対象をコピペで手軽に登録できて、ボタン1つで一 括削除できる、というようなツールを探しています。 どなたかご存じであればお教え下さい。 よろしくお願いします。

  • 複数のファイルを読み込み、1つのファイルとして出力する方法。

    Nakanoです。いつもお世話になっております。 例えばテキストファイルを2つ用意し、1つのテキストファイルとして 出力したいのですが、いまいちやり方が分かりません。出来るのかどうかも 分からないです。(汗) 下にサンプルデータがあります。取り合えず「in1.txt」「in2.txt」 を最終的に『out.txt』の様に仕上げたいのですが… # =in1.txt AAAAA BBBBB CCCCC DDDDD 1,000 2,000 3,000 4,000 1,001 2,002 3,003 4,004 1,010 2,020 3,030 4,040 1,100 2,200 3,300 4,400 =in2.txt EEEEE FFFFF GGGGG HHHHH 5,000 6,000 7,000 8,000 5,005 6,006 7,007 8,008 5,050 6,060 7,070 8,080 5,500 6,600 7,700 8,800 # =out.txt AAAAA BBBBB CCCCC DDDDD EEEEE FFFFF GGGGG HHHHH 1,000 2,000 3,000 4,000 5,000 6,000 7,000 8,000 1,001 2,002 3,003 4,004 5,005 6,006 7,007 8,008 1,010 2,020 3,030 4,040 5,050 6,060 7,070 8,080 1,100 2,200 3,300 4,400 5,500 6,600 7,700 8,800 # ・このデータはタブで区切っています。カンマはない場合もあります。 ・ファイルの中のそれぞれの文字列の数は固定です。行数も固定です。  各文字列の中の文字数はランダムです。  COPYコマンドを利用しても考えてみたのですが、後ろに続いちゃって  上手くいかなかったです。(笑)  Perlだと1つ目のファイルの1行目を配列に入れて、次に2つ目の  ファイルの1行目を配列に入れて、これを一旦出力して、同じ手順の  様な事を行を2行目、3行目、4行目、、とずらして繰り返す。って  感じでイメージしているのですが、どの様にソースを組めばいいのか  分かりませんでした。  どなたかご教授いただけないでしょうか? 宜しくお願い致します。

  • Access テキストデータのソートについて

    Accessでのテキストデータのソートの仕様で悩んでます。 例を挙げると・・・ テキスト型のフィールドに対し以下のようなデータを入力します。 フィールド1 9-1 9-001 9-0001 90-1 90-001 900-1 900-11 9000-1 9001-1 90000-1 ここでフィールド1を昇順でソートをすると 90000-1 9-0001 90-001 9000-1 9-001 900-1 900-11 9001-1 90-1 9-1 という順になってしまい、並び方に一貫性が無いように思えます。 なぜこのような並びになってしまうのか? お判りになられる方、いらっしゃいませんか??

  • 文字列分割して、ソート出来ますか?

    SQL内で文字列を分割して、その値でソートすることは出来ますか? データ) First Name + Last Name が1つのフィールドに入っている。 リストアップ) Last Nameのみを抽出して、ソート。 こんなことは可能でしょうか?

  • テーブルAにあって、テーブルBにないデータ抽出

    このようなデータのテーブルがあります。 テーブルA key ID ----------------- 1 AAAAA 2 BBBBB 3 CCCCC 4 DDDDD 5 EEEEE 6 FFFFF 7 GGGGG 8 HHHHH 9 IIIII テーブルB key ID ----------------- 1 AAAAA 2 CCCCC 3 EEEEE 4 FFFFF 5 HHHHH 6 IIIII 7 JJJJJ 8 KKKKK 9 LLLLL この場合テーブルAのIDの中で、テーブルBのIDには存在しない行を取り出すのに、プログラムを使わずに取得する方法はありますか? この例だと取得するはずの行は key ID ----------------- 2 BBBBB 4 DDDDD 7 GGGGG になります。 どうかよろしくお願いします。

    • ベストアンサー
    • MySQL
  • 配列のインデックスを連番にしたい

    array 0 => 'aaaaa' (length=5) 2 => 'bbbbb' (length=5) 4 => 'ccccc' (length=5) 7 => 'ddddd' (length=5) 9 => 'eeeee' (length=5) 上記のような配列があった場合に、 インデックスを0からの連番にしたいのですが 何かいい方法はありますか? 以下のようにarray_reverseを二度使うという方法を 思いついたんですが、こういう使い方は何か変ですよね。。。 $field = array_reverse($field); $field = array_reverse($field); var_dump($field); array 0 => 'aaaaa' (length=5) 1 => 'bbbbb' (length=5) 2 => 'ccccc' (length=5) 3 => 'ddddd' (length=5) 4 => 'eeeee' (length=5)

    • ベストアンサー
    • PHP
  • TextBoxに入力された文字列のソート

    TextBoxに入力された文字列のソート TextBoxに入力された文字列のソート 開発環境:Visual Web Developer 2008 express 言語:Visual Basic TextBoxを縦5行横3列に並べた表形式の入力フォームがあり、1列目のTextBox(番号…1,4、7、10、13)に入力された文字列(数値)を基準に、昇順にソートし、行ごと入れ替えるプログラムを作りたいのですが、TextBoxを利用したソートの参考になるものが見つからず息詰まっています。どなたかサンプルや参考になるサイトがあれば、教えてください。 ###入力フォーム### 1  あああ あああ 3  ううう ううう 2  いいい いいい 5  おおお おおお 4  えええ えええ ###実際に出したい結果### 1  あああ あああ 2  いいい いいい 3  ううう ううう 4  えええ えええ 5  おおお おおお

  • 数字文字列のソート方法

    文字列に数字を含むデータのソートを行うプログラムを C言語で作成したいのですが、どうすれば良いでしょうか? 具体的に言うと、a12、a2、a10という順序で並んでいる データを昇順にソートした場合にa10、a12,a2というように ソートせず、ちゃんとa2,a10,a12とソートされるように したいのですが、簡単にできるものでしょうか? 質問がわかりにくいかもしれないのですが、どうかご回答をお願いします。