• 締切済み

シェルによりデータの並べ替え方法

shige_70の回答

  • shige_70
  • ベストアンサー率17% (168/946)
回答No.1

シェルの機能だけでは困難です。 awkの連想配列を用いれば簡単にできると思います。 awkの実装方法ですが、各行に対し、2カラム目をsplitした文字列をインデックスとした配列に1カラム目の文字列をつなげていって、最後にその配列を出力してあげれば良いでしょう。

hwang
質問者

お礼

なるほど、その考え方がありましか。やってみます。 教えていただいて、ありがとうござうます。

関連するQ&A

  • Kシェルのリダイレクト

    Kシェルのリダイレクト シェル初心者で申し訳ございませんが、ご教授いただけたら幸いです。 やりたいこと  xxx.kshの実行ログを出力したい。 出力したいログは、以下コマンド実行時に標準出力されるログをファイルへ落としたい。 尚、実際の実行コマンドは、ksh -xは入力しません。 $ ksh -x ./xxx.ksh 上記コマンドを実行すると、詳細なログが表示されるのですが、ファイルへ落としたいと思います。 分かりづらいかも知れませんが、宜しくお願い致します。

  • なぜLinuxでKornシェルが使えるのでしょうか?

    Linux初心者です。 シェルについてわからないことがあり、質問させていただきます。 Linux(Red Hatを使っています)の /bin/shと/bin/cshは、それぞれ/bin/bash、/bin/tcshのシンボリックリンクファイル、 なのに対して、なぜkshだけは/bin/kshそのままなのでしょうか? また、KornシェルはAT&T社が開発したものだそうですが、 これはLinuxで使う際にライセンスの問題に触れないのでしょうか? よろしくお願いいたします。

  • LinuxでKornシェルが使えるのは何故でしょうか。

    Linux初心者です。 シェルについてわからないことがあり、質問させていただきます。 Linux(Red Hatを使っています)の /bin/shと/bin/cshは、それぞれ/bin/bash、/bin/tcshのシンボリックリンクファイル、 なのに対して、なぜkshだけは/bin/kshそのままなのでしょうか? また、KornシェルはAT&T社が開発したものだそうですが、 これはLinuxで使う際にライセンスの問題に触れないのでしょうか? よろしくお願いいたします。

  • Bシェルのawkコマンドについて

    Bシェルのawkコマンドについてですが、例えばプロンプトから % ls -l hoge.txt | awk '{print $5}' と入力すると、hoge.txtのファイルサイズが出力されますが、同様のことをBシェルの中で行おうと思っています。 下記のように、配列arrayにはスペース区切りで3つのデータが入っており、N番目のデータを取得したいという場合に、Nに変数を使用して取得する方法がわかりません。 #!/bin/sh array="AA BB CC" num=3 # CCを取得したい echo $array | awk '{print $num}' 上記で実行すると、"AA BB CC"のようにすべて出力されてしまいます。awkで出力する箇所を${数値}で指定すればうまくいくのですが、ランダムで決めた数値(1~3)をnumに入れて取得したい場合、このようなことは可能でしょうか。 もし不可能な場合でも、awk以外に何かコマンドがあればご教授願います。なお、作成するのはBシェルになります。

  • シェルファイル内での「setenv」、「unsetenv」の実行

    (UNIX環境) シェルファイル内にて 「setenv LANG ja_JP.SJIS」 「unsetenv LANG」 と記述し実行しようとしたのですが、 「setenv:not found」 「unsetenv:not found」 というエラーが出力されてしまいます・・・。 ちなみにコマンドをそのまま実行した場合は正常に処理されます。 kshにて実行されている為で、cshで実行しなければならないということでしょうか? 現在デフォルトにて何シェルが起動しているのか、どのようしたら分かるのでしょうか? 「env | grep csh」 と実行してみると「SHELL=/user/bin/csh」という結果がえられるのですが・・・。

  • シェルスクリプトで条件を指定してファイルの加工を行いたいのですが

    シェルスクリプトで条件を指定してファイルの加工を行いたいのですが シェルスクリプト(ksh)で、入力ファイルから条件に該当する行だけ抽出して出力したいと考えています。 ただ1つ条件があって、【awkは使用禁止】です。 処理としては ID00001,山田太郎,社員 ID00002,田中花子,社員 ID00003,中島次郎,派遣 というCSVファイルがあって、3列目の値が社員のものを抽出して ID00001,山田太郎,社員 ID00002,田中花子,社員 というファイルを出力したいのです。 下記のようなシェルになるとは思いますが手詰まりです。awkなら一瞬で終わるのですが、シェルだけですと3列目の抽出方法がよくわかりません。シェルに詳しい方、ご教示願えます。 while read line do if (3行目を抽出する条件); then print ${line} >> output.csv fi done < input.csv

  • シェルの実行について

    シェル、コマンドを実行に関して質問があります。 シェル名だけ「シェル名」だけで実行できたり「./シェル名」としないと実行できなかったりしますが、この違いはどこからくるのでしょうか? また、「csh シェル名」とするばあいもありますが、これらの明確に違い(使い分け)が分かりません。 ご教授の程宜しくお願いいたします。

  • perlからsystemコマンド呼ばれる時のシェルについて

    HP-UX/perl4 で作成したスクリプトを、Linux(Red Hat)/perl5 へ移植するに当たって、system関数の動作が異なり困っています。 HP-UX では ksh をシェルとして使用していたため、perl からのsysytem関数で実行するsystemコマンドも、kshで動作するものを使っていました。Linuxでもログインシェルをkshに設定しました。 ところが、HP-UXで使っていたprintコマンドが使用できず、以下のエラーメッセージが出ます。 sh: print: command not found シェルはkshを指定していても、perlからsystem関数やバッククウォート`` でシステムコマンドを実行するときは、shが使われるようなのです。 perl内の記述は以下のとおりです。 system("print 'a'"); "print"の前に"ksh "をつけたり、"print"を"echo"に変えると、正しく動作します。 移植するperlの本数が多いのと、print以外にもこの問題が起きるかもしれませんので、できれば perl 内からのシステムコマンド実行時にもログインシェルとおなじ ksh で動くようにしたいのですが、どのようにすればよいのでしょうか? よろしくお願いいたします。

  • シェルスクリプトの中のawkユーザー定義関数

    cシェルの中でawkのユーザー定義関数を使う方法について教えてください。 以下の内容の入力ファイルがあったとして、 3 3 306 2 2 258 1 1 105 3列目を数値の大小に応じて、別の数値に置き換えて以下のファイル 3 3 10 2 2 9 1 1 8 を出力したいのです。 cシェルスクリプト中でawkのユーザー定義関数を使って作成したいのですが、シェルスクリプト中に関数をどこでどう定義してよいか分かりません。 cシェルスクリプトの中身は #/bin/csh -f gawk'{print $1,$2,symbolsize($3)}' input_data > output_data で、以下の関数を定義したいのです。 function symbolsize(ccc){ if (ccc >= 300) return 10 #300以上なら10を返す if (ccc >= 200 && ccc < 300) return 9 #200以上300未満なら9を返す else return 8 #それ以外なら8を返す } プログラミング初心者なので、なにとぞよろしくお願いします。

  • kシェルスクリプト内に行を挿入

    kシェルスクリプトで質問です。 例えば、以下のようなファイルがあったとします ********************************************** #!/bin/ksh   if (条件式1) then   コマンド1   コマンド2 endif if (条件式2) then   コマンド3   # aaaaaaaaaa else   コマンド4 endif ********************************************** ”コマンド3”の文字列をキーにして"# aaaaaaaaaa"の下に 「echo ttttttttt」 と、を追加するといった方法、ないでしょうか? もちろん、viで開いて追加する・・・というのではなく、、、 awkやsed等々、コマンドで。ご存知の方いらしたらお願いします。 ps. 余力があればjavaでも検討したいとは思いますが、javaはまったく初心者。。