- 1 名前:名無しさん@お腹いっぱい。 mailto:sageteoff [2015/08/14(金) 23:42:01.51 .net]
- シェルスクリプトの総合スレです。
□お約束 ・特記なき場合はBourne Shell(/bin/sh)がデフォルトです。 bash/zsh/ksh/ashなどに依存する場合は明示しましょう。 Linuxユーザは/bin/shの正体がbashまたはdashなので特に注意。 FreeBSDユーザは/bin/shの正体がashなので注意。 v7 shに一番近くて、現役のshは、OpenSolaris由来のheirloom sh。 src.illumos.org/source/xref/illumos-gate/usr/src/cmd/sh/ heirloom.sourceforge.net/sh.html ・csh/tcshのシェルスクリプトは推奨されません。 (理由は「csh-whynot」でググれ) ・UNIXにはシェルスクリプトに便利な小さなコマンドがいろいろあります。 manや参考リンクを見ましょう。 aproposないしはman -kでそれらしい単語による簡単な検索もできます。 ・シェルで使えるワイルドカード等は正規表現ではありません。 正規表現の話題はスレ違い(正規表現スレへ) ・シェルスクリプトのことをシェルってゆーな □初心者へのアドバイス: ・適した道具を判断するのも頭の重要な使い方。シェルスクリプトよりも awkまたはperlの方が適した処理にはそちらを使いましょう。 ・知らないコマンドが出てきたらmanを引きましょう。 ・思い通りに動かないときは、まずは sh -x でトレースしましょう。 □回答者への注意事項: ・シェルスクリプトでの処理方法を質問しているのに、よくわからずに 「そういうのはperl使いましょう」と回答するのはやめましょう。 安易にperlに逃げずにシェルスクリプトで処理するのが頭のいいやり方。 前スレ シェルスクリプト総合 その24 peace.2ch.net/test/read.cgi/unix/1415634843/
- 801 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/10/29(土) 21:05:55.08 .net]
- 実行中の標準出力と標準エラーをログしながら表示させることって出来る?
むかしリダイレクトとtailでやったらうまく行かなかった覚えがあってやめた気がする
- 802 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/10/29(土) 21:22:36.46 .net]
- プロセス置換を使う
cmd > >(tee stdout.log) 2> >(tee stderr.log)
- 803 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/10/29(土) 22:19:49.67 .net]
- そういえばPOSIX shにはないな…すまん
- 804 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/10/30(日) 09:23:07.74 .net]
- cmd > stdout.log 2> stderr.log & tail -f stdout.log stderr.log
で出来ないか?
- 805 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/10/30(日) 21:41:34.72 .net]
- 下記でOKだった
{ { cmd | tee stdout.log 1>&3; } 2>&1 | tee stderr.log 1>&2; } 3>&1 ・bash: 標準出力、標準エラー出力をファイル、画面それぞれに出力する方法 - Qiita qiita.com/laikuaut/items/e1cc312ffc7ec2c872fc
- 806 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/11/04(金) 12:24:35.95 .net]
- 音楽CDを突っ込んでmp3を作る。
この時ファイル名とmp3タグにはCDDBから読み込んで来る。 これをやるのに手っ取り早い方法ってなんだろ
- 807 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/11/04(金) 12:26:20.17 .net]
- EAC自動化
- 808 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/11/04(金) 12:31:52.74 .net]
- abcde使えよ
- 809 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/11/17(木) 04:52:04.55 .net]
- /usr/bin/test を使った判定がよくわからなくて困ってます
curl でhttp の応答をチェックしたいのですが 下記みたいにしてもちゃんと判定できないのですが何が原因でしょうか? test $(curl -XHEAD -s -i https://www.google.co.jp | awk NR=1) = 'HTTP/1.1 200 OK';echo $?
- 810 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/11/17(木) 06:02:01.01 .net]
- くおー
$ [ $(curl -I localhost/ 2>&- | head -n 1) = 'HTTP/1.1 200 OK' ]; echo $? bash: [: too many arguments 2 $ [ "$(curl -I localhost/ 2>&- | head -n 1)" = 'HTTP/1.1 200 OK' ]; echo $? 0 $ [ "$(curl -I localhost/dummy 2>&- | head -n 1)" = 'HTTP/1.1 200 OK' ]; echo $? 1 っとちょっと色々違うけど、うちでは之でなんとかなってる
- 811 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/11/17(木) 06:27:40.74 .net]
- "HTTP/1.1 200 OK"$'\r'
- 812 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/11/17(木) 08:38:26.65 .net]
- そういうのはステータスコードだけを見るようにしたほうがいいよ
test "$(curl -I -s -o /dev/null -w '%{http_code}' https://www.google.co.jp/)" = 200 HTTPステータス行の Reason-Phrase ("OK" や "Not Found" の部分) は送出者が自由に書けるし HTTPバージョンも当然固定じゃない # HTTP2を有効にしてビルドしたcurlの場合: $ curl -I -s https://www.google.co.jp/ | head -n 1 HTTP/2 200 $
- 813 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/11/17(木) 08:49:14.72 .net]
- >>798
訂正 ウェブブラウザで表示すると余分なセミコロンが混じってしまう test "$( curl -I -s -o /dev/null -w '%{http_code}' https://www.google.co.jp/ )" = 200
- 814 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/11/17(木) 12:19:57.15 .net]
- >>521
いいお(´・ω・`)
- 815 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/11/17(木) 12:21:26.17 .net]
- うちのcurlは終了しなかった
-XHEAD を外してみた -bash: test: too many argumentsになった $()を""で括った awkが効いてなさそう NR==1 にした まだ一致しない 行末がCRLFだった $'\r'を付けた とりあえず test $(curl -XHEAD -s -i https://www.google.co.jp | awk NR=1) = 'HTTP/1.1 200 OK';echo $? はこう test "$(curl -s -i https://www.google.co.jp | awk NR==1)" = 'HTTP/1.1 200 OK'$'\r';echo $? なった
- 816 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/11/17(木) 12:47:25.00 .net]
- つまり纏めるとこうか
test "$(curl -I -w "%{http_code}" example.com/ 2>&- |tail -1)" = 200; echo $?
- 817 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/11/17(木) 14:56:39.30 .net]
- なんでレスポンスを取得する操作と
取得したレスポンスをtestする操作を一度にしようとするのか理解不能
- 818 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/11/17(木) 16:51:11.77 .net]
- ワンライナー原理教の方ですかね?w
まあ何でも一度にやってみたくなる衝動は理解できなくもない。 そこに山があるから、的な何か。
- 819 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/11/17(木) 17:02:47.58 .net]
- そこにパイプがあるからな
- 820 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/12/07(水) 08:00:32.91 .net]
- 品位が問われるAdvent Calendar -- シェルスクリプトはどこでも動く!
ttp://www.peeep.us/4a5535c5 なんかあの界隈よく揉めてるな… 👀 Rock54: Caution(BBR-MD5:f4da0c707200fe35c49b788174082785)
- 821 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/12/07(水) 09:27:19.82 .net]
- 品位のないやつだな
- 822 名前:名無しさん@お腹いっぱい。 [2016/12/07(水) 10:58:10.89 .net]
- qiitaとかに書いちゃう輩なんてそんなもんだろ
- 823 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/12/07(水) 12:13:29.28 .net]
- この記事がキモいのは認めるけど、十把一絡げにQiitaを悪く言うのはやめて!
とはいうもののオタクのコミュニティって、どこでもちんぽ騎士団ぽいのがいるよね…… ぼっち最高やで。
- 824 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/12/07(水) 15:49:11.13 .net]
- シェルスクリプトで、if
- 825 名前:とthenの間に改行がある場合で、その間に#をつけたコメント行を入れるのはNGですか?
ifの条件を、動作テストのため、いくつか使い分けたくて、thenより上の行で、テストで使い終わった判定を コメント化しました。実際の判定が、コメント化したものが活かされたりと、おかしくなりました。 以下の、1分ごとに呼び出されるコードで、毎時40分だけ動いて貰いたいのに、10分おきに条件成立となりました。 #1hour if [ `date '+%M'` -eq "40" ] #10min # if [ `date '+%M' | tail -c 2` -eq 0 ] #all # if [ true ] then echo 処理 fi [] - [ここ壊れてます]
- 826 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/12/07(水) 16:18:47.23 .net]
- >>809
あそこで役に立つ記事あるか? 自己満のゴミ情報が大部分だからgoogole personal blockの対象だわ
- 827 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/12/07(水) 16:49:19.73 .net]
- >>810 テストの大括弧の後ろにセミコロン付ければいいんでね?
- 828 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/12/07(水) 18:34:13.86 ID:v2ZV9RF7w]
- bash3.2+ で IFS=$' \t\n' な状態で
$ echo "foo bar" baz | hoge.bash
とした時に hoge.bash 内で "foo bar" と baz を 別々の引数として取得するにはどうすればいいですか?
- 829 名前:名無しさん@お腹いっぱい。 [2016/12/07(水) 19:49:58.99 .net]
- >>811
わかる。盛大な勘違い書いててドャァしてる感がすごい
- 830 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/12/07(水) 21:31:23.08 .net]
- googoleとかのことか
- 831 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/12/07(水) 23:23:03.71 .net]
- >>810
素直にcrontab使った方が良いんじゃね
- 832 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/12/08(木) 09:58:48.36 .net]
- >>810
そんなこと起きないはず ほんとにそのコード?
- 833 名前:名無しさん@お腹いっぱい。 [2016/12/10(土) 20:22:24.90 .net]
- すいません、教えて下さい。
色んなネットーワーク機器のログをsedでズバッとマスキングかけたいんだけど、URLと、IPアドレスの正規表現を教えて下さい。
- 834 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/12/10(土) 20:25:17.66 .net]
- 817d
- 835 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/12/14(水) 16:17:30.58 .net]
- TBS
det dritte folkemn
- 836 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/12/21(水) 04:35:52.23 .net]
- 文字列から実行して、返り値も標準出力も格納したいんだけど
testCmd="なんかのコマンド" result=$(eval testCmd) この後の$0はevalの返り値なのかtestCmdの帰りなのかよくわからんのですが
- 837 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/12/21(水) 05:11:40.55 .net]
- >>821
$0 ってどういうこと? $? の間違いなら man bash の eval に書いてある。
- 838 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/12/21(水) 06:35:22.65 .net]
- 普通に考えるなら
export testCmd="コマンド" $testCmd > ログファイル 戻り値=$?
- 839 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/12/21(水) 06:47:35.19 .net]
- ちなみにスクリプトにすると
result=`$testCmd` で標準出力が入って $?でも戻り値は取れるけど 標準エラー出力は取れないね
- 840 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/12/21(水) 11:34:52.01 .net]
- 失礼いたしました$?ですね
testCmd="なんかのコマンド" result=$(eval $testCmd) returncode=$? 標準エラーはいらんのですが プロセス置換?とかでできるのかな
- 841 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/12/22(木) 09:27:10.08 .net]
- いまいち何を訊きたいのか分からん。
$?はevalの終了ステータスが設定される。evalの終了ステータスはtestCmdの終了ステータスが設定される
- 842 名前:名無しさん@お腹いっぱい。 [2016/12/22(木) 12:40:53.01 .net]
- > この後の$0はevalの返り値なのかtestCmdの帰りなのかよくわからんのですが
マニュアル読んでわかんなきゃ試してどうなるか調べないと 正常終了するコマンドだけじゃなくてそれ以外もね
- 843 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/01/15(日) 17:41:24.20 .net]
- [ .... ] を [[ .... ]]に単純に置き換えて問題あります
でしょうか?
- 844 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/01/15(日) 18:20:34.24 .net]
- コマンドの引数を変数化したときって、どうやってその変数をコマンドに渡せばいいの?
#!/bin/bash opts=“-f $file” hoge $opts これだと hogeコマンドが unrecognized option エラーになってしまう。 初歩的な質問ですまん
- 845 名前:828 mailto:sage [2017/01/15(日) 18:27:02.19 .net]
- スマソ、自己解決
$fileが不正だっただけやん
- 846 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/01/16(月) 21:28:07.13 .net]
- >>828
mywiki.wooledge.org/Bashism#Conditionals > [[ is not defined by POSIX, originated in ksh and is also present in zsh
- 847 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/01/17(火) 21:34:40.69 .net]
- bashでif使って変数に"ok"が入ってるかはどうやって確かめればいいんでしょうか?
if [ $a = "ok" ]; then echo hoge else echo fuga fi の様にしているのですが"ok"が入っていても別の文字列が入っていてもfugaが出力されてしまいます
- 848 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/01/17(火) 21:59:37.47 .net]
- $a の中身が引用符の無い裸の
ok ならば真になるはず
- 849 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/01/17(火) 22:02:25.13 .net]
- できればそのままやりたいんです
cutかなんかで事前に削るしかないですかね?
- 850 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/01/17(火) 22:14:16.11 .net]
- 831 の "ok" を '"ok"' または "\"ok\"" にすれば
- 851 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/01/18(水) 09:13:18.95 .net]
- 引用符付きの文字列なの?
- 852 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/01/18(水) 11:40:24.29 .net]
- >>835
\"でうまく行きました ありがとうございます >>836 そうです "ok"か"error"、またはそれ以外の文字列(引用符なし)が入ってる
- 853 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/01/21(土) 12:38:14.00 .net]
- 使ってないと何もかも忘れる・・
- 854 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/01/21(土) 16:06:57.66 .net]
- 忘れるで思い出した、シェルスクリプトと関係ないけどinfoでいつも迷子になるわ俺
- 855 名前:. mailto:sage [2017/01/21(土) 20:26:15.12 .net]
- これってどうかな?
gihyo.jp/magazine/wdpress/plus/978-4-7741-8694-8
- 856 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/01/21(土) 21:16:52.05 .net]
- configure全部読めば桶
- 857 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/01/23(月) 23:25:46.35 .net]
- httpdのログでIP直でアクセスして来たIPをbanするスクリプト作ってcronで回すようにした
- 858 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/01/23(月) 23:40:12.97 .net]
- 接続しに来た全IPをBAN判定する負荷のほうが高くなりそうだね
- 859 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/01/23(月) 23:46:44.50 .net]
- blockはpfでやってるけど、負荷があるのかわからない。たいして無いように思う。前は中国IPを全部はじいてたけど、特に不都合はなかった
- 860 名前:名無しさん@お腹いっぱい。 [2017/02/05(日) 17:07:27.34 .net]
- ビギナーなんですが、教えてくれませんか。
for i in {1..3} do echo $i done で 1 2 3 ではなく{1..3}が出力されます。どうして?
- 861 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/02/05(日) 17:13:16.91 .net]
- bash じゃないから
- 862 名前:名無しさん@お腹いっぱい。 [2017/02/05(日) 17:15:56.58 .net]
- >>846
ありがとう・・・ありがとう・・・
- 863 名前:名無しさん@お腹いっぱい。 [2017/02/05(日) 19:26:02.43 .net]
- もう一個お願いします。
testを 1 2 3 というファイルだとして、 cat test|while read line; do sed -e "s/.*/a/"; done をやると a a a ではなく a a となるのはなぜですか?
- 864 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/02/05(日) 20:04:29.97 .net]
- ホントは、
cat test|while read line; do echo "$line" | sed -e 's/.*/a/'; done ってしたいんじゃない? cat test|while read line; do sed -e "s/.*/a/"; done だと、1行目を read が喰って、2行目以降は全て sed に入力される ことになるよ。
- 865 名前:名無しさん@お腹いっぱい。 [2017/02/05(日) 20:26:43.25 .net]
- >>849
ありがとう・・・。そういう仕組みになってるのは知らなかった。
- 866 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/02/08(水) 13:58:57.76 .net]
- list.txt に書いてあるファイルを一括で転送するスクリプトを書いたのですが、
これに送信前と送信後のmd5を比較して、一致しなかったら再送させるにはどうすればいいですか? pastebin.com/aXucBuHW
- 867 名前:名無しさん@お腹いっぱい。 [2017/02/08(水) 23:14:15.74 .net]
- 一度 mvしてしまったものは再送出来ない
- 868 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/02/09(木) 12:54:00.09 .net]
- こういうファイルを重複箇所は2度目に出現する箇所のみ削ってマージする方法ってある?
$ cat file1.txt 1 2 3 4 $ cat file2.txt 3 4 5 5 6 センスない自分
- 869 名前:ニしてはheadとtailを使って逐一チェックしながら
マージすると言うプログラミング的な方法しか思いつかなかった・・・ [] - [ここ壊れてます]
- 870 名前:名無しさん@お腹いっぱい。 [2017/02/09(木) 13:09:23.15 .net]
- cat file1.txt file2.txt | sort -nu
あくまでも中には数字しかないならばの話で。
- 871 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/02/09(木) 13:17:38.41 .net]
- 連結してsortしてuniqじゃダメなの?
- 872 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/02/09(木) 13:35:43.26 .net]
- >>854-855
ありがとうございます 数字を使ったのは単なるサンプルなので・・・実際は文字列が入っています 今はcatで単純マージしたあとにviで重複箇所を削っていて かつそのファイルを利用する時にsortしてuniqしています できればファイルサイズとかも気にしたいので パイプとかで簡単かつ堅実に出来ないかなと思ったのです
- 873 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/02/09(木) 13:40:12.55 .net]
- すでにソートされてるんならuniqだけでいいんじゃね
そうじゃないんなら、ありうる最大限一般的な例を出さないのがだめ
- 874 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/02/09(木) 16:02:59.69 .net]
- awk 使うとか
$ cat file1.txt file2.txt | awk '{if(!u[$0]){u[$0]=1;print;}}'
- 875 名前:名無しさん@お腹いっぱい。 [2017/02/09(木) 19:01:56.53 .net]
- https://www.youtube.com/watch?v=quIHgwuF6r4&sns=em
- 876 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/02/09(木) 19:13:20.28 .net]
- 2次元座標をy座標 -> x座標の順でソートしたいんだけど
ソートキーの値がある範囲内(例えばプラスマイナス100)にある場合は同じ値とみなすみたいなことできますか? 入力イメージ 0001 31 149 0002 21 156 0003 11 145 0004 52 344 0005 42 356 0005 12 353 0006 53 594 0007 13 613 出力イメージ 0003 11 145 0002 21 156 0001 31 149 0005 12 353 0005 42 356 0004 52 344 0007 13 613 0006 53 594 比較ロジック(0はa=b、-1はa<b, 1はa>b) function compare (a, b) { if (a.y < b.y - 100) return -1 if (a.y > b.y + 100) return 1 if (a.x < b.x - 100) return -1 if (a.x > b.x + 100) return 1 return 0 }
- 877 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/02/09(木) 19:14:30.15 .net]
- >>860
入力イメージは(id, x, y)で 3カラム目がy座標、2カラム目がx座標です
- 878 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/02/09(木) 19:50:30.95 .net]
- 区間に分けていいんなら、100単位で丸めたキーを追加してソートすればいいけど、
その比較関数をきっちり実装するのは無理があるね awkかそれ以上のスクリプト言語使うくらいかな
- 879 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/02/09(木) 20:07:21.71 .net]
- プラマイ100とかだと全部同じ値になるんじゃないの?
四捨五入で丸めるなら分かるけど
- 880 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/02/09(木) 21:01:26.79 .net]
- pythonのsortはstableだと保証されてるけど、他のは?
- 881 名前:859 mailto:sage [2017/02/09(木) 21:46:47.59 .net]
- >>862
>>863 入力イメージの値にあるみたいに丸めだと欲しい結果が得られないのでスクリプト言語使ってみます ありがとうございます >>864 stableかどうかはあんまり考えてませんでした 1カラム目のユニークな値でソート済みなところからの処理なので stableじゃないsortの場合は比較ロジックに1カラム目を追加して対応します
- 882 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/02/09(木) 22:44:27.46 .net]
- んー、500=560で、560=620だけど、500<620って、ソート誤らんかな
- 883 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/02/09(木) 23:31:32.77 .net]
- >>865
このスレで言うべきでは無い気はするけど Excelとかの表計算ソフトを使った方が良さそうな気が
- 884 名前:859 mailto:sage [2017/02/10(金) 00:45:19.33 .net]
- >>866
ユニークなキーも比較条件に追加すれば並び順は一意に決まるので誤ることはないかと >>867 シェルスクリプトでいろいろ処理する途中の処理なんです
- 885 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/02/10(金) 01:36:54.52 .net]
- >>868
qsortを仮定して、たまたまピボットが560になったときと 620になったときで結果が変わるよ 誤るというか、結果が一意で
- 886 名前:ない []
- [ここ壊れてます]
- 887 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/02/10(金) 02:16:12.75 .net]
- 1カラム目がユニークキーだとしてそれも比較条件に入れれば
各行の比較で必ず上下関係が明確になるのでqsortでも大丈夫じゃないでしょうか 001 620 002 560 003 500
- 888 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/02/10(金) 05:48:37.28 .net]
- シェルでも他言語でもプログラミングが必要で
ループ処理しながら選択ソートするしかないね まあまずシェルで〜とかじゃなくて ExcelでもJavaでも何でもいいから簡単に実装できる方法を調べてみて シェルに落としこめるかを調べた方がいいと思う 例えば偏差とか一般的で誰でも使うから統計処理なんてawkで楽に出来るんだけど >>860がやりたいのって特殊だから独自実装が必要になると思うよ 茶化してるわけじゃないけど はじめに自分がやりたいことは何なんでしょうって聞くのが早いと思う
- 889 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/02/10(金) 06:15:23.45 .net]
- 数学詳しくないけど
前後のデータの単純比較じゃなくて 全データとの比較が必要になるから コマンド1発じゃ無理だね(10発くらいでも無理だけど) キーを追加するにしてもデータ数-1分のキーが必要になるし(xとyでさらに2倍か) キーが別だからそこからソートする方法が浮かばない スクリプトでもプログラムでもいいけど プラマイ100を同値とするソートのロジック組むしかないと思う
- 890 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/02/10(金) 08:25:47.98 .net]
- >>870
qsortの中身知ってる? パーティショニングしたらあとはブロック内の入れ替えしかしないよ
- 891 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/02/10(金) 08:29:02.88 .net]
- >>872
データ数-1とか2倍とか意味わからん
- 892 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/02/10(金) 09:53:38.19 .net]
- >>868
並び順は良いだろうけど A=B B=C A≠C の時そもそもどうなれば良いの? 001 A 001 B ??? C
- 893 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/02/10(金) 10:06:02.58 .net]
- ソートっていうのは同値類とその間の全順序を決めて要素を並べることだよね
>>860のcompareだと推移律を満たさないので同値類になっていない だからおかしなことになる
- 894 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/02/10(金) 10:15:12.36 .net]
- このように複雑になる場合は要求定義が不適切な事が多い
- 895 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/02/10(金) 10:16:20.47 .net]
- 普通に全部出せよ
何で小出しにしてんだよアホじゃねえよ
- 896 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/02/10(金) 10:35:17.25 .net]
- 複雑って言うか単純なんだけど特殊なだけでしょ
- 897 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/02/10(金) 10:52:33.90 .net]
- こんなアホソート誰が必要とするんだよwww
ソート前 001 200 200 002 100 100 003 0 0 ソート後 003 0 0 ←一番小さく200との差が100を超えているため入れ替える 001 200 200 ←一番大きいが100からは100以内なので入れ替えない 002 100 100 ←200より小さいが200からは100以内なので入れ替えない アホだw コレ意味の分かってないやつがロジック組むと 100から見たら0も200もプラマイ100以内だから 並べ替えしないとか言うことになるだろう 要するにプラマイ100を見込んだ最小値を求めて 2週目のループでそれを除外した中からさらに最小値を求めていくだけ 終わりまで選択ソートをやるだけなんだけど そこにプラマイ100の比較を追加する必要がある ぶっちゃけソート結果を見れば分かるように こいつソートしてんの?って思うだろう そもそも>>874の考えが破綻していると言うか思いつきソートなんだろうと思う 統計とか学んだ方がいいかな〜
- 898 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/02/10(金) 10:59:36.91 .net]
- ぶっちゃけプログラムを書くのは簡単
- 899 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/02/10(金) 11:04:25.90 .net]
- 特殊じゃなくて曖昧なんでしょ
早い話、1000x1000の平面のすべての整数座標に点があったらどうソートしたいわけ? 2次元だからややこしいわけでなく1次元でも同じこと
- 900 名前:873 mailto:sage [2017/02/10(金) 11:07:21.05 .net]
- >>880
俺になんの用?
|

|