1 名前:login:Penguin [2007/07/10(火) 23:17:13 ID:qGthZdME] UNIX板のスレを見ている方も多数おられるかと思いますが、 まあそれはそれとして、BASHウゼーとか言われる心配なく 平和にLINUX的スクリプト談義しましょうよ。 初めての自作スクリプト、自信ないから見てください。な初心者から トリッキーな技を駆使した作品を披露したい、蘊蓄を語りたい上級者まで いろいろな人に参加して頂けると嬉しいです。 perlやらPythonやらの話が混ざっても良いんでない? 【sed】シェルスクリプト総合@LINUX Part2【awk】 pc11.2ch.net/test/read.cgi/linux/1154578200/ pc8.2ch.net/test/read.cgi/linux/1121994321/ >>2-5 あたりに色々と。
471 名前:login:Penguin mailto:sage [2008/01/18(金) 22:55:09 ID:S6Zw/ddB] >>467 最新のLinuxの(いやほんと。これだけは伝統的理由で残ってるのかな)
472 名前:login:Penguin mailto:sage [2008/01/18(金) 23:22:22 ID:6BHP4h96] >471 鳥は?
473 名前:login:Penguin mailto:sage [2008/01/19(土) 01:14:55 ID:ZLNpfSkQ] >>472 Debian (sid)。まあ bsdgames とかまんまレガシーなパッケージだけだけどね。
474 名前:login:Penguin mailto:sage [2008/01/19(土) 05:58:20 ID:JWtUz7T2] Debian etch にも/usr/games はあるな。 中みたらbannerとfortuneが入ってた。
475 名前:login:Penguin mailto:sage [2008/01/19(土) 08:07:34 ID:njld/y5g] シェルスクリプトの本で実用例の多い本ってありませんか?
476 名前:login:Penguin [2008/01/19(土) 17:07:33 ID:NuJUp+KH] Fedora4を使っています /start.txt内の記載が 12 254 3678 4 59 621 78 896 、、、、、、 と法則性の無い桁数の数字が2000行近くあるものを /end.txtに 12,254,3678,4 59,621,78,896 、、、、 A,B,C,Dと4項目で1行に変換したいと思っています start.txtから4行抜き出して end.txtに1行にする考え方でいい方法を教えていただけないでしょうか よろしくお願いいたします
477 名前:login:Penguin mailto:sage [2008/01/19(土) 18:46:40 ID:ZLMZWyE0] cat /tmp/test.txt | awk 'NR%4{printf("%s,",$0)} !(NR%4) {print $0} ' 余りが出たら最後カンマ付きで出力されちゃうけど
478 名前:login:Penguin [2008/01/19(土) 18:55:41 ID:NuJUp+KH] >>477 完璧な物ありがとうございます 今迄sedばかり使っていたのですがawkすごいですね awkの勉強させていただきます
479 名前:login:Penguin mailto:sage [2008/01/19(土) 18:59:10 ID:IrN8xoLt] >>477 あらupしようとしたら同じだったわ。 awk '{printf"%s%s",$0,(NR%4?",":"\n")}' < start.txt
480 名前:login:Penguin mailto:sage [2008/01/19(土) 19:02:55 ID:NuJUp+KH] >>479 ありがとうございました とても参考になります
481 名前:login:Penguin mailto:sage [2008/01/19(土) 19:43:02 ID:rxOILVvf] vi start.txt q94J↓q10000@9 :%s/ /,/g :w end.txt
482 名前:login:Penguin mailto:sage [2008/01/19(土) 19:59:13 ID:58USgOmq] >>473-474 Debianではゲームの実行バイナリは/usr/gamesに置かれるぜ。 最近はポリシーチェッカも警告を出すようになったから、lennyまでには移動完了するんじゃね。 lintian.debian.org/reports/Tpackage-section-games-but-contains-no-game.html lintian.debian.org/reports/Tpackage-section-games-but-has-usr-bin.html
483 名前:login:Penguin mailto:sage [2008/01/19(土) 21:00:37 ID:ZLNpfSkQ] >>482 なんでだろうね? FHS誤解してたかと読み直したらそんなことないし。理由がわからん。
484 名前:login:Penguin mailto:sage [2008/01/19(土) 21:04:24 ID:ZLNpfSkQ] ごめん上は嘘。Debian Policy には As described in the FHS, binaries of games should be installed in the directory /usr/games. This also applies to games that use the X Window System. Manual pages for games (X and non-X games) should be installed in /usr/share/man/man6. とか書いてあった。FHSをgrepしたら、正式なセクションはないが、optionalとしてgames作っていいと 書いてあった。
485 名前:login:Penguin mailto:sage [2008/01/19(土) 21:14:55 ID:Xt/fDApd] FHSとかグローバリゼーションとか国際化とか そういうのが全て悪の元凶。
486 名前:login:Penguin mailto:sage [2008/01/19(土) 22:06:40 ID:ZLNpfSkQ] FHSは/usr/localと/etcを綺麗にしてくれる。 それだけでも推進されてしかるべき。
487 名前:login:Penguin mailto:sage [2008/01/20(日) 02:02:52 ID:dexE1e0m] /usr/gamesはオプションなのに、/usr/local/gamesは必須扱いなところを見れば分かるとおり ディトリビュータはゲームなんか提供すんな、ということなのだよ。 つまりゲームを提供しているDebianは人々を堕落させる悪のディストリビュータなのだ!
488 名前:login:Penguin mailto:sage [2008/01/20(日) 02:23:04 ID:kH+ebKTA] >>487 なにその陰謀史観(w 単に /usr/ 直下はディストリの管轄だし自分で決めろ、 一方で /usr/local/* は空フォルダ切っておく以上は認められないから 代わりとして、せめて誘導できるように切っておけ、ということかと。 FHSで自分的に従来慣習と比較して見慣れないのは/srvだな。 どこのUNIXでの慣習だったんだろう?
489 名前:login:Penguin mailto:sage [2008/01/20(日) 02:55:38 ID:M1QHfiRt] つっこみどころは /usr/games/bin/fortune じゃなくて /usr/games/fortune ってとこじゃなかったのかー
490 名前:login:Penguin mailto:sage [2008/01/20(日) 04:01:16 ID:FZKKsnAp] >>476 sed ':b;1~4,+2{N;s/\n/,/;bb}' sedも心の片隅にでも置いておいてやってくだされ。
491 名前:login:Penguin mailto:sage [2008/01/20(日) 04:20:45 ID:IwRos1VB] >>489 管理者のPATHからゲーム関係を除外するのが目的だろうから /usr/games/binとサブディレクトリを掘る必要はないんじゃね。
492 名前:login:Penguin mailto:sage [2008/01/21(月) 02:31:10 ID:HJiECvMS] >>490 そんな記法初めて見た… どうなってんの???
493 名前:login:Penguin mailto:sage [2008/01/21(月) 02:55:10 ID:QTxOOwHl] アドレス指定がGNU拡張?
494 名前:login:Penguin mailto:sage [2008/01/21(月) 11:41:48 ID:JvqHER/W] >>476 paste -d, - - - - paste も心の片(ry
495 名前:login:Penguin mailto:sage [2008/01/21(月) 14:42:32 ID:svPtjQeo] 次のようなファイルがあるとします。 $ cat name.txt name1 name2 name3 name4 name5 $ cat weight.txt weight1 weight2 weight3 weight4 weight5 このとき、なんとかして $ ??????????? name1 weight1 name2 weight2 name3 weight3 name4 weight4 name5 weight5 と表示したいのですができません。 最初は $ cat name.txt weight.txt > data.txt $ awk '{ if(NR<=5) a[NR]=$0; else b[NR-5]=$0} end{for(i=1;i<=100;i++) printf i,a[i],b[i];}' data.txt としましたが、空白が表示されるだけでした。
496 名前:login:Penguin mailto:sage [2008/01/21(月) 14:51:31 ID:N+zVQlnl] >>495 paste
497 名前:login:Penguin mailto:sage [2008/01/21(月) 14:53:35 ID:svPtjQeo] >>496 ありがとうございました。 ぐぐるまでもヘルプ読むまでもなく、 適当にいじっただけでそうなりました。
498 名前:login:Penguin mailto:sage [2008/01/22(火) 11:11:17 ID:DOTIpHDE] gawk 'FILENAME != old {i=0;old=FILENAME} {data[i++] = data[i]" "$0;} END{for(j=0; j<i; j++)print data[j]}' name.txt weight.txt gawk 'FILENAME != old {i=0;old=FILENAME} {data[i++] = data[i]" "$0;} END{for(j=0; j<i; j++)print data[j]}' name.txt weight.txt height.txt ファイル数に制限はない。あと出力される行数は、最後のファイルの行数によって決まってしまうがな。
499 名前:login:Penguin mailto:sage [2008/01/25(金) 13:18:49 ID:u9KTnE0i] ランダムに壁紙を表示するスクリプト作ってみました 一応予想通りに動いてるようですが問題点や改善点があったら叩いてくだしあ #!/bin/sh EXT='.jpeg$|.jpg$|.png$' LIST=`ls $1 | grep -Ei $EXT` if [ "$LIST" = '' ] ; then\ echo "No files found in $1." exit fi NUM=`echo $LIST | wc -w` N=`expr $RANDOM % $NUM + 1` TARGET=`echo $LIST | cut -d ' ' -f $N` #echo "$1/$TARGET" bsetbg $1/$TARGET
500 名前:login:Penguin mailto:sage [2008/01/25(金) 15:41:59 ID:5ugSsaO2] >>499 そのままだと画像ファイル名やパスに空白があると動かないけど、いいのか?
501 名前:login:Penguin mailto:sage [2008/01/25(金) 17:04:10 ID:HizVC3Pf] #!/usr/bin/python import sys, os, random def is_image(filename): EXT = ('jpeg', 'jpg', 'png') return any(filename.endswith(ext) for ext in EXT) if sys.argv[1:]: dir = sys.argv[1] else: dir = os.path.curdir files = filter(is_image, os.listdir(dir)) if not files: print "No images found in %s" % dir sys.exit(1) target = random.choice(files) os.system("echo bsetbg '%s'" % os.path.join(dir, target)) # 高級言語って素晴らしいね
502 名前:login:Penguin mailto:sage [2008/01/25(金) 17:51:17 ID:u9KTnE0i] >501 ちょwwスレタイwww 修正してみました #!/bin/sh EXT='.jpeg$|.jpg$|.png$' if [ "$1" = '' ] ; then\ DIR=`pwd` else\ DIR="$1" fi LIST=`ls "$DIR" | grep -Ei "$EXT"` if [ "$LIST" = '' ] ; then\ echo "No files found in $DIR." exit fi NUM=`echo "$LIST" | wc -w` N=`expr "$RANDOM % $NUM + 1"` TARGET=`echo "$LIST" | cut -d ' ' -f "$N"` #echo "$DIR/$TARGET" bsetbg "$DIR/$TARGET"
503 名前:login:Penguin mailto:sage [2008/01/25(金) 18:55:56 ID:u9KTnE0i] >502 事故レス expr はクオートしちゃまずかった
504 名前:login:Penguin mailto:sage [2008/01/26(土) 00:32:05 ID:0LMYrtfF] 個人的には NUM= 以降を配列でやらせることが多いので、わりと bash を使う。 #!/bin/bash DIR=$1 IFS=' ' TARGET=(`find "${DIR:=.}" -maxdepth 1 \( -name '*.[Jj][Pp][Ee][Gg]' -o -name '*.[Jj][Pp][Gg]' -o -name '*.[Pp][Nn][Gg]' \)`) if [ ${#TARGET[@]} -eq 0 ]; then echo "No files found in ${DIR:=.}" exit -1 fi #echo ${TARGET[`expr ${RANDOM} % ${#TARGET[@]}`]} bsetbg ${TARGET[`expr ${RANDOM} % ${#TARGET[@]}`]} とか。
505 名前:login:Penguin mailto:sage [2008/01/26(土) 00:54:55 ID:a+SvfS+1] >>504 おまいさんの find には -iname は無いのか? あと、bash なら自前で算術計算できるよ bsetbg "${TARGET[RANDOM % ${#TARGET[@]}]}"
506 名前:login:Penguin mailto:sage [2008/01/26(土) 01:31:49 ID:Gp61cAWI] >おまいさんの find には -iname は無いのか? あ、これは知らんかった。有り難う。 >あと、bash なら自前で算術計算できるよ こちらは知っていたけど、元ネタに合わせんと。
507 名前:login:Penguin mailto:sage [2008/01/26(土) 11:11:47 ID:NixStw3D] #!/bin/sh filesize=('du -h ~/file.tmp') $loglen > ~/filesize.txt という感じでfile.tmpのファイルサイズを出力したいのですが 出力結果に不要な部分があります。 欲しい部分だけ切り取るには、どうすればいいでしょうか? よろしくお願いします。 100k /home/user/file.tmp ~~~~~ ~~~~~~~~~~~~~~~~~~~~ ↑ ↑ 欲しい 要らない部分
508 名前:login:Penguin mailto:sage [2008/01/26(土) 11:20:53 ID:NixStw3D] #!/bin/sh filesize=('du -h ~/file.tmp') $filesize > ~/filesize.txt 間違えてしまいました。こんな感じです。 grepで抽出するオプションの書き方も思い付かず スクリプトで処理するには・・・?と、行き詰まってます。
509 名前:login:Penguin mailto:sage [2008/01/26(土) 11:34:50 ID:opXPKDAo] >>508 cut (coreutils)
510 名前:login:Penguin mailto:sage [2008/01/26(土) 11:48:51 ID:NixStw3D] >>509 ヒントありがとうございます。 使い方を調べてみます。
511 名前:login:Penguin mailto:sage [2008/01/26(土) 12:47:23 ID:NixStw3D] >>509 もう少しヒントをください。 cat と coreutils のどちらかを使うや cat か coreutilsのどちらかを使うかや レスの意図を示していただけるとありがたいです。 シェルスクリプト歴数時間で理解が及ばなく申し訳ないです。
512 名前:login:Penguin mailto:sage [2008/01/26(土) 12:52:39 ID:K0Rp0izE] >511 ちょっとでもぐぐってみたのかと. あと猫じゃなくて切るほうな.
513 名前:login:Penguin mailto:sage [2008/01/26(土) 13:12:20 ID:NixStw3D] >>512 調べてみたのですが、広範囲になってきて混乱してきました。 今のところ cat -Tというオプションと、rtというコマンドを発見して コンソール上で du -h /home/user/file.tmp|cat -T|tr "^I/home/user/file.tmp" " " とすると、ファイル数だけ表示されるようになったので うまい方法でもないような気もしつつに #!/bin/sh filesize=('du -h /home/user/file.tmp|cat -T|tr "^I/home/user/file.tmp" " "') $filesize > ~/filesize.txt としてみたのですが $./filesize.sh ↓うまく実行できずに困っています。 du: invalid option -- T du: invalid option -- | du: invalid option -- t du: invalid option -- r 詳しくは `du --help' を実行して下さい.
514 名前:login:Penguin mailto:sage [2008/01/26(土) 13:15:18 ID:K0Rp0izE] >513 catじゃなくてcut.たぶんこれ一発でやりたいことはできると思うから調べてみな.
515 名前:login:Penguin mailto:sage [2008/01/26(土) 13:22:31 ID:NixStw3D] >>512 ,514 ありがとうございます。 素で間違えていました。 調べてみます。
516 名前:login:Penguin mailto:sage [2008/01/26(土) 13:24:02 ID:ShBosd97] stat -c %s ではだめなのか
517 名前:login:Penguin mailto:sage [2008/01/26(土) 13:43:18 ID:NixStw3D] コンソールで $ du -h /home/user/file.tmp|cat -T|cut -d ^ -f 1 としたらうまくファイルサイズだけ切り出せたので #!/bin/sh filesize=('du -h /home/user/file.tmp|cat -T|cut -d ^ -f 1') $filesize > ~/filesize.txt と、してみたのですが なにか基本的な構文がおかしいのでしょうか? バックスラッシュやシングル、ダブルクォーテーションを試してみましたが回避できません。 ↓ du: invalid option -- T du: invalid option -- | du: invalid option -- u du: invalid option -- t du: invalid option -- d du: invalid option -- f 詳しくは `du --help' を実行して下さい. >>516 ヒントありがとうございます。 調べてみます。
518 名前:login:Penguin mailto:sage [2008/01/26(土) 14:22:43 ID:/buRKO/4] >>517 これでいいだろ。 du -h /home/user/file.tmp | awk '{print $1}' > ~/filesize.txt
519 名前:login:Penguin mailto:sage [2008/01/26(土) 16:30:30 ID:NixStw3D] >>518 調べたらawkは強力で、いろいろ使えそうです。 出力も当初の予定通りで完璧でした。 ありがとうございます。 結果を変数に代入出来なくなりましたが、構文を参考に>>517 を直したら同様の出力結果で動きました。 #!/bin/sh du -h /home/user/file.tmp | cat -T | cut -d ^ -f 1 > ~/filesize.txt >>516 >>518 さんを参考に手を入れたらキロバイト表示もできました。 ありがとうございます。 ただ、数字の後ろに「k」を入れる方法が判りませんでしたが。 #!/bin/sh stat -c %s /home/user/file.tmp | awk '{printf "%s" ,$1/1024}' > ~/filesize.txt
520 名前:login:Penguin mailto:sage [2008/01/26(土) 16:43:00 ID:/buRKO/4] >>519 stat -c %s /home/user/file.tmp | awk '{printf "%sk" ,$1}' > ~/filesize.txt
521 名前:login:Penguin mailto:sage [2008/01/26(土) 23:58:52 ID:NixStw3D] >>520 応用ありがとうございます! 感謝。
522 名前:login:Penguin mailto:sage [2008/01/29(火) 13:18:07 ID:8n8HPqGB] columnコマンドがない環境でインデント合わせをしたいのですが、 何か良い方法はあるでしょうか?
523 名前:login:Penguin mailto:sage [2008/01/29(火) 15:57:53 ID:8n8HPqGB] lsコマンドで、ファイルのatimeやctimeを取得する方法はあるでしょうか。 HP環境なので、Linuxのstatコマンドがなくて途方にくれています。
524 名前:login:Penguin mailto:sage [2008/01/29(火) 16:05:29 ID:qGMFgswu] >>523 Linux の話じゃないなら板違い。
525 名前:login:Penguin mailto:sage [2008/01/29(火) 16:33:43 ID:yAbAmnAs] ファイルから目的の行を削除して上書きしたいとき, sed -e 2d file >tempfile mv tempfile file のようにすればできるんですが,テンポラリファイルを使わない方法はありますか?
526 名前:login:Penguin mailto:sage [2008/01/29(火) 16:37:12 ID:qGMFgswu] >>525 GNU sed なら -i で。
527 名前:login:Penguin mailto:sage [2008/01/29(火) 21:52:45 ID:6iHka9Si] リダイレクトとサブシェルを駆使してうまいことinplace editをやる技が あったはずなんだがどうやってぐぐればいいかわからん。
528 名前:login:Penguin mailto:sage [2008/01/29(火) 23:11:45 ID:k/ZizWnP] つ named pipe
529 名前:login:Penguin mailto:sage [2008/01/30(水) 00:25:54 ID:/azTEfDv] こんな感じのやつか? $ echo hoge > hoge $ (rm hoge; (echo fuga; cat) > hoge) < hoge 要はサブシェルに開かせておけば中で上書きしても内容は デスクリプタから参照できるからそれでin-place処理できるって奴だな。 上は手抜きだけど、どっかのFAQにデスクリプタ付け替えまくりの例題が 載ってたのだけ覚えてる。csh-whynot文書あたりかも?
530 名前:login:Penguin mailto:sage [2008/01/30(水) 00:35:03 ID:KwdpVGiV] おおう、そんなかんじだったかも。thx
531 名前:login:Penguin mailto:sage [2008/01/30(水) 20:21:01 ID:6DxEwSig] すいません ちょっと今シェルの作り方で困っているのですが やりたいことは 一つのフォルダに入っているファイルを、ファイル名によって3つのフォルダに振り分けたいのです。 その際に、どのファイルをどのフォルダに移動するのかはシェルの中に記述するのではなく、 ファイル名の一覧が書いてあるtxtファイルを一行ずつ読んで振り分けたいのです。 ですが、作り方が今いちわかりません。 例えばA,B,Cと分かれていたら 1、Aのフォルダに振り分けるファイル名が書かれたtxtファイルを読む 2、同じファイル名がヒットしたらAに送る 3、次にBのフォルダに振り分けるファイル名が書かれたtxtファイルを読む 4、同じファイル名がヒットしたらBに送る ファイル名が書かれたtxtファイルはA用B用C用の3種類用意します。 どうやって作ればいいのでしょうか?
532 名前:login:Penguin mailto:sage [2008/01/30(水) 20:36:32 ID:CiuX3/ZK] シェルの作り方なんぞ知るかい。
533 名前:login:Penguin mailto:sage [2008/01/30(水) 20:38:30 ID:0RlCwXSW] 宿題は自分でやれ。
534 名前:login:Penguin mailto:sage [2008/01/30(水) 21:41:32 ID:wmsZ0JX8] >531 testコマンドでググレカス ファイルの読み込み方すらわかんねーなら本一冊買って出直して来い
535 名前:login:Penguin mailto:sage [2008/01/30(水) 21:48:11 ID:6DxEwSig] うわー 冷たい しかも叩く時だけは一気にレスがつくんだね >>532 >>533 わからないなら無理にレスしなくていいです
536 名前:login:Penguin mailto:sage [2008/01/30(水) 22:48:33 ID:5hT959VT] さいきんの、このバカの質問な感じのには >>わからないなら無理にレスしなくていいです に類する文言が書き込まれる率が高いな、て思えるんだが、これは 1. この手のバカは結局バカだから、おなじようにしか考えられない 2. 実は同じヤツが何度も釣りに励んでいる のどちらか、ということだろうか?
537 名前:login:Penguin mailto:sage [2008/01/30(水) 22:54:16 ID:KwdpVGiV] シェルを作るのは結構高度な作業だからな。
538 名前:login:Penguin mailto:sage [2008/01/30(水) 22:59:49 ID:v0ETiHGx] >>536 真・教えて君養成マニュアルとかがどっかにあるんじゃないか?w
539 名前:login:Penguin mailto:sage [2008/01/30(水) 23:01:22 ID:sxNLHjSv] >537 最近はGUIの環境もシェルと呼んだりするらしいしね. ところで,シェルスクリプトをシェルと略す感覚が信じられない.せめてスクリプトのほうを残すべきじゃないのか,意味的に…
540 名前:login:Penguin mailto:sage [2008/01/30(水) 23:05:38 ID:j0KqLeiL] 教えてクン養成マニュアル www.redout.net/data/osietekun.html
541 名前:login:Penguin mailto:sage [2008/01/30(水) 23:39:48 ID:KwdpVGiV] >>539 GUIのシェルってのはそう最近でもないと思う。 DOSSHELLとか、X68kのVS.Xとかあったじゃないか。
542 名前:login:Penguin mailto:sage [2008/01/31(木) 00:54:52 ID:5zXcU2rl] >>531 うわーきもい。シェルを作るという表現はおかしい シェルの作り方って、VBの作り方、Javaの作り方 聞いているのと同じ。それをKY言うのは異常。 for文とifを組み合わせれてループさせれば。
543 名前:login:Penguin mailto:sage [2008/01/31(木) 05:38:28 ID:sRx07lee] >>535 >わからないなら無理にレスしなくていいです。 たぶんここの人は9割以上わかっていると思う。
544 名前:login:Penguin mailto:sage [2008/01/31(木) 05:47:16 ID:sRx07lee] やる気がおきない。 態度の豹変に腹が立つ。 mv -i `neko a.list` a mv -i `neko b.list` b mv -i `neko c.list` c
545 名前:login:Penguin mailto:sage [2008/01/31(木) 13:37:31 ID:zeMbksrC] >>544 単純にnukoするよりもls -1 | grep -f a.list とかしてより分けた方が良くないか?
546 名前:login:Penguin [2008/01/31(木) 19:50:10 ID:/M27f8ta] for 変数名 in 10 20 30 do echo $変数名 done この構文の変数名ってなんでもいいんですか? あとこれを実行すると 10 20 30 になりますよね?
547 名前:login:Penguin mailto:sage [2008/01/31(木) 20:53:32 ID:p8W84r95] >>546 変数名に使える文字は英字と数字、アンダースコアのみな。
548 名前:login:Penguin mailto:sage [2008/01/31(木) 21:07:34 ID:Ih8EaxE5] すると、うちのbashはおかしい。。。 $ for 9_var in 10 20 30; do echo $9_var; done bash: `9_var': not a valid identifier
549 名前:login:Penguin mailto:sage [2008/01/31(木) 21:49:51 ID:g7asi3X7] もしかして>>351 == >>548 なんか? こんなところで釣りなんかすんなよ... もし釣りじゃなくってバカなんだったら、せめてmanするとかググるセンセに聞くとか、な?
550 名前:548 mailto:sage [2008/01/31(木) 22:00:40 ID:m8vTasa1] その話題では>>354 だが、なぜ351と?
551 名前:login:Penguin mailto:sage [2008/01/31(木) 23:25:56 ID:g7asi3X7] >>550 う゛、勘違いとかtypoとか。いかんな、落ち着かんと。 でもってマヂレスしとくと、変数の1文字目は数字じゃダメな。
552 名前:login:Penguin mailto:sage [2008/02/01(金) 20:50:34 ID:aG/PrNJ9] kakikomi.txtというテキストファイルがあったとします。 STRING1 を含んでいて、かつ STRING2も含んでいる行だけを 印字しようとおもうのですが、 grep STRING1 kakikomi.txt| grep STRING2 くらいしか思いつきません。二度手間な気がします。 もう少しいい方法ありませんか?
553 名前:login:Penguin mailto:sage [2008/02/01(金) 20:57:02 ID:IKSH1LNN] >552 -e
554 名前:login:Penguin mailto:sage [2008/02/01(金) 21:42:25 ID:KLEwAeBF] >>552 それ前スレ(UNIX板のほうだったかも試練)で話題になったな 「STRING1とSTRING2を『順不同で』含む行をイッパツで引っ掛けようとしたら egrep '(STRING1.+STRING2)|(STRING2.+STRING1)' となってしまう。2個ならまだいいが、3個、4個...と増えていくと正規表現がキモいことになってしまう。 順不同という条件なら、>>552 のやり方が一番シンプル
555 名前:login:Penguin mailto:sage [2008/02/01(金) 22:20:29 ID:9CGaNXUy] awk '/STRING1/&&/STRING2/' kakikomi.txt とか。
556 名前:login:Penguin mailto:sage [2008/02/01(金) 23:10:27 ID:aG/PrNJ9] >>554 ,555 ありがとうございました。 最近暇なので本でいろいろ勉強してみます。
557 名前:login:Penguin [2008/02/02(土) 02:58:37 ID:jQtmOvcu] 例えばここに置いてある松金洋子のデスクトップ用壁紙画像をターゲットとする。 www.sexydesktop.co.uk/youko.htm ここには全部で4ページ分48種類の松金洋子の画像がある。 ## このサイトの画像はすべてデスクトップ用の壁紙を目的としているので、 ## 一つの画像に関して数種類の解像度・縦横比の画像が用意されており、 ## アクセスしてきた人の使っているディスプレイ解像度を検出しては、 ## 最適な解像度のものを優先的にプッシュするようになっている。 ## また、画像ファイルの命名ルールは非常に単純かつ形式的で、 ## たとえば例に挙げた松金洋子の画像の場合、 ## まず画像の名前を表す youko1 から youko48 までの48種類の画像が用意されている。 ## さらにそれぞれの解像度を表す 1280x800 や 800x600 の文字列が続き、 ## 最後に拡張子 .jpg が付けられている。 ## 注意する点があるとすると、例えば youko48 に対して youko01 だとか、 ## 1280x1024 に対して 0800x0600 といった「桁数合わせ」が一切行われていないということ。
558 名前:557 [2008/02/02(土) 02:59:35 ID:jQtmOvcu] ここから先が質問。やりたいことは、 1). サイトがプッシュしてくるこちらのディスプレイ解像度に関係なく、 すべての画像について、解像度のより大きいバージョンを、 番号の一番若いものから古いものまで全種類取って来たい。 2). その際、取って来た画像のファイル名を修正して、 youko48 に対しては youko01 、1280x1024 に対して 0800x0600 などの「桁数合わせ」をしたい。 3). さらに、ファイル名の中の画像名を表す文字列と、解像度を表す文字列とを _ で結ぶようにしたい。 具体的には、youko11600x1200.jpg と名付けられた youko1 という画像の 1600x1200 版のファイル名を、youko01_1600x1200.jpg としたい。同様に、youko481280x1024.jpg と名付けられた youko48 という画像の 1280x1024 版のファイル名を youko48_1280x1024.jpg としたい。 以上をまとめると、参考例の松金洋子の画像で言えば、 youko11600x1200.jpg から youko481280x1024.jpg までの画像を、 youko01_1600x1200.jpg から youko48_1280x1024.jpg として保存したい。 これを実現するスクリプトをどう書けばいいでしょうか? なお、好みのタレントの画像が何種類用意されているか(松金洋子の場合は48種類)については、 ダウンロードを開始する前に手作業で調べることとします。
559 名前:login:Penguin mailto:sage [2008/02/02(土) 03:11:26 ID:BYWZpRq/] >>557-558 まずお前が考えて出来たスクリプトをうpしろ 話はそれからだ
560 名前:557-558 [2008/02/02(土) 03:17:30 ID:jQtmOvcu] んー、俺はスクリプトに無知だから、一から十まで全部取って来て、 後で手作業で仕分けする、みたいな超バカなことしかできんのです。 だからエロい人に教えてほしいんです。。 ダメならヒントだけでもいいので下さい。
561 名前:login:Penguin mailto:sage [2008/02/02(土) 03:19:54 ID:BYWZpRq/] >>557-558 ほらよ っ google.co.jp
562 名前:login:Penguin mailto:sage [2008/02/02(土) 07:40:21 ID:QLk1rUEb] 地道にループ回すしかないのでは たぶんリネーム関連はperlか何か使ったほうがラクじゃね?
563 名前:login:Penguin mailto:sage [2008/02/02(土) 08:38:47 ID:VQl51rL6] 2).3). youko0123456789x0123456789.jpg というファイル名はどのように整形すれば?
564 名前:login:Penguin [2008/02/02(土) 10:16:29 ID:2Gx0/Giv] $cat test.txt aaaaaaaaaaaaaaaaaaaaaaaaaa +bbbbbbbbbb cccccccccccccccccccccccc +ddddddddddddddd 長い行は先頭に+をつけて折り返しているという内容のファイルを $cat test.txt aaaaaaaaaaaaaaaaaaaaaaaaaa bbbbbbbbbb cccccccccccccccccccccccc ddddddddddddddd というように+の折り返しを前の行の後ろに空白付で結合させるにはどうすればいいでしょう?
565 名前:login:Penguin mailto:sage [2008/02/02(土) 10:19:50 ID:QLk1rUEb] cat test.txt | tr '\n+' ' 'とかどう?
566 名前:login:Penguin mailto:sage [2008/02/02(土) 10:34:51 ID:2Gx0/Giv] >>565 実行したら $cat test.txt aaaaaaaaaaaaaaaaaaaaaaaaaa bbbbbbbbbb cccccccccccccccccccccccc ddddddddddddddd みたいになりましたが $cat test.txt aaaaaaaaaaaaaaaaaaaaaaaaaa bbbbbbbbbb cccccccccccccccccccccccc ddddddddddddddd これが出力としてほしいです。 \nと+が別で判断されているのでしょうか・・・
567 名前:login:Penguin mailto:sage [2008/02/02(土) 10:37:11 ID:QLk1rUEb] 間違った.cat test.txt | tr '\n\+' ' 'で.
568 名前:login:Penguin mailto:sage [2008/02/02(土) 10:39:50 ID:QLk1rUEb] ごめん,俺嘘ばっかり言ってるから気にしないでorz
569 名前:login:Penguin mailto:sage [2008/02/02(土) 10:41:24 ID:2Gx0/Giv] >.567 同じ結果でしたw レスありがとう!
570 名前:557-558 [2008/02/02(土) 10:50:34 ID:jQtmOvcu] >>563 どうもです。 えー、そういう名前のファイルは存在しないので考えてもみませんでした。 >>562 もし $name$no1024x768$suffix がある時 $name$no1024x0768$suffix にせよ、 みたいなことを延々とやる、ということなんでしょうか?(←無知) うーん。。。
571 名前:login:Penguin mailto:sage [2008/02/02(土) 11:02:51 ID:jHuzpaac] >>564 if 先頭が+じゃない then echo "" else echo -n " " fi echo -n 行