1 名前:デフォルトの名無しさん [2005/04/04(月) 03:43:03 ] シェルスクリプトに関する質問・回答や議論等を行う相談室スレッド。
411 名前:デフォルトの名無しさん mailto:sage [2006/11/09(木) 22:25:23 ] ファイル処理に便利だしね シェルスクリプト作ってた筈なのに 気がつくとawkとsedの処理が8割だった事がある
412 名前:デフォルトの名無しさん mailto:sage [2006/11/10(金) 00:34:43 ] 下手な文字列処理なんかだと、Cで書くよりよっぽど早いしメンテナンスしやすいからな。
413 名前:デフォルトの名無しさん mailto:sage [2006/11/10(金) 13:50:16 ] うちの高専で半年くらいawkばっかりやらせてた測量学の教官がいた
414 名前:デフォルトの名無しさん mailto:sage [2006/11/10(金) 13:53:17 ] ↑ 授業で
415 名前:デフォルトの名無しさん mailto:sage [2006/11/10(金) 15:36:22 ] ときどきでいいのでawkスレのことも思い出してあげてください。 pc8.2ch.net/test/read.cgi/tech/1023556171/
416 名前:デフォルトの名無しさん mailto:sage [2006/11/12(日) 16:23:26 ] >>410 「一寸、微笑ましい」という本心をコメントする。
417 名前:デフォルトの名無しさん [2006/11/13(月) 17:30:40 ] >>380 23:15〜03:15とか 04:30〜9:30とか 分の単位がある場合でも 一行で簡潔にかけたりする?
418 名前:デフォルトの名無しさん mailto:sage [2006/11/13(月) 19:14:24 ] >>417 awk -F '[,:]' '$2$3>="2315"||$2$3<"0315"' logfile awk -F '[,:]' '$2$3>="0430"&&$2$3<"0930"' logfile
419 名前:デフォルトの名無しさん mailto:sage [2006/11/13(月) 21:42:59 ] >>417 $2>=23&&$3>=15||$2<2||$2<3&&$3<15 こんな感じの書き方をすりゃいいんでないの?とアドバイスをしようと思ったら >>418 がなんかすごい技を繰り出してて…恥ずかしくなってきた罠。
420 名前:デフォルトの名無しさん mailto:sage [2006/11/13(月) 21:59:53 ] >>412 AWKの文字列処理ってCより速いの?
421 名前:デフォルトの名無しさん mailto:sage [2006/11/13(月) 22:18:38 ] >418 -F × -f ○
422 名前:デフォルトの名無しさん mailto:sage [2006/11/13(月) 22:56:55 ] >>421 been opened if it were a file name. The option -v followed by var=value is an assignment to be done before prog is executed; any number of -v options may be present. The -F fs option defines the input field separator to be the regular expression fs. /usr/share/man/cat1/awk.1 line 26/250 (11%)
423 名前:デフォルトの名無しさん mailto:sage [2006/11/13(月) 23:05:47 ] >>421 コマンドラインで FS の設定をしてるから間違っとらんよ。
424 名前:デフォルトの名無しさん [2006/11/13(月) 23:38:44 ] リストファイルから一行ずつパターンを読み込ませて テキストファイルを一行ずつパターン検索したいんですが awkでファイルから入力する方法ってありますか?
425 名前:デフォルトの名無しさん mailto:sage [2006/11/13(月) 23:51:26 ] getline関数は現在の入力ファイルから次の入力レコードを $0 に代入する。 getline < file は file から次の入力レコードを $0 に代入する。 getline x は変数 x に代入する。 cmd | getline は cmd の出力を getline にパイプする。 getline は入力が成功すると1,ファイルの末尾で 0,エラーで -1 を返す。
426 名前:412 mailto:sage [2006/11/13(月) 23:56:23 ] >>420 「速い」じゃなくて「早い」だ。つまり、どっちが早くプログラミングできるかってこと。
427 名前:デフォルトの名無しさん [2006/11/13(月) 23:57:53 ] 変数を受け取って、一連の処理を行うようにしたコマンドの羅列だろ。 ひとつずつコマンドを打ち込んで処理するのが面倒くさいから 判定とか分岐とか呼び出しとかを使って、処理自体を複雑・多様化するようにしたんだろ。 更に、ひとくくりの処理を名前を付けて登録できるから、コマンドはそれひとつで 自分で組んだ複数の処理をしてくれる。 基本的に古臭いものだし、フロントエンドを設けてGUI化したのを 使うのが最適だと思うのに、何故に今更ながらのコマンドシェルなんだ? 馬鹿?
428 名前:デフォルトの名無しさん mailto:sage [2006/11/14(火) 00:08:47 ] 〃∩ ∧_∧ ⊂⌒( ・ω・) `ヽ_っ⌒/⌒c はいはいわろすわろす ⌒ ⌒
429 名前:デフォルトの名無しさん mailto:sage [2006/11/14(火) 07:07:15 ] >>424 同じファイルの次行レコードをgetlineで読めるはずだけど 処理中に別ファイルは読めないんじゃないかな fopenとかないし引数とらせるとかなら方法あるかもな
430 名前:デフォルトの名無しさん mailto:sage [2006/11/14(火) 07:37:30 ] >>429 >425
431 名前:デフォルトの名無しさん [2006/11/14(火) 19:44:15 ] パターンファイルに一致するレコードを削除したいのですが、どうやったら実現できるでしょうか? シェルでもアークでも構いません。御指南下さい。 テキストファイル(テキスト.txt) 20061110,AAA 20061111,BBB 20061112,CCC 20061113,DDD ・ ・ ・ ・ ・ パターンファイル(パターン.ptn) AAA CCC GGG
432 名前:デフォルトの名無しさん mailto:sage [2006/11/14(火) 19:45:09 ] >シェル 失せろ >アーク 消えろ
433 名前:デフォルトの名無しさん mailto:sage [2006/11/14(火) 20:35:18 ] % cat foo.awk BEGIN { while (getline < ptn == 1) pattern[n++] = $0 } { for (i = 0; i < n; i++) if ($0 ~ pattern[i]) break if (i == n) print } % awk -f foo.awk -v ptn=pattern.ptn text.txt 20061111,BBB 20061113,DDD 20061114,EEE ……
434 名前:デフォルトの名無しさん mailto:sage [2006/11/14(火) 20:51:08 ] grep -v -f パターン.ptn テキスト.txt
435 名前:デフォルトの名無しさん mailto:sage [2006/11/14(火) 21:52:58 ] >431 アークじゃないよ。 オークって読むよ。 >433 awkって何でもできるんだな。
436 名前:デフォルトの名無しさん mailto:sage [2006/11/14(火) 22:07:46 ] >>415 にも書いてるけどawkスレも使ってやってください。 awkについて語るスレ pc8.2ch.net/test/read.cgi/tech/1023556171/
437 名前:デフォルトの名無しさん [2006/11/14(火) 23:03:02 ] >>433 オークってよむんですか。 ありがとうございます。
438 名前:デフォルトの名無しさん mailto:sage [2006/11/15(水) 00:37:29 ] bashなんですが、daemonの起動スクリプトとかで 変数にブレースがついてたり、ついてなかったりするのは どういう意図があるの?
439 名前:デフォルトの名無しさん mailto:sage [2006/11/15(水) 00:58:40 ] >>438 1. 変数と文字列を明示的に区切りたいから ex) ${foo}bar 2. ブレース展開を使っている ex) ${foo%.*} 3. ただの気まぐれ
440 名前:デフォルトの名無しさん [2006/11/16(木) 00:52:32 ] getline 変数 で、次のレコードを読んで変数に代入になると思いますが、 更にgetline 変数を使うと更に次の行が読み込まれるのでしょうか? そのあとawk処理を終えて次のレコードをawkが読みに行ったとき、getlineの影響を受けて読んでいる行が進んでしまいますか? AWKスクリプト { getline A PRINT A getline A PRINT A } 読み込みファイル AAAAA BBBBB CCCCC DDDDD 出力結果はこう? AAAAA BBBBB CCCCC DDDDD 出力結果はこう? AAAAA BBBBB BBBBB CCCCC CCCCC DDDDD
441 名前:デフォルトの名無しさん mailto:sage [2006/11/16(木) 00:57:16 ] やってみればいいじゃん。 つーか、シェルからの起動も絡まないawkの話はawkのスレでやれよ。
442 名前:デフォルトの名無しさん mailto:sage [2006/11/16(木) 01:02:20 ] スレ名変えればいいだろ、 【シェルって】サーバ用途のスクリプト【貝殻?】
443 名前:デフォルトの名無しさん [2006/11/16(木) 01:07:00 ] sedなんかを使って特定のタグで囲まれたところを出力することって可能ですか? sdak;dkslakdas;das<TAG>dkalkdlas;kdsla;kds;akdsal;dkslad;</TAG>dlaskldkalsfocmdcsdlc,ds
444 名前:デフォルトの名無しさん mailto:sage [2006/11/16(木) 01:12:20 ] 行内に開始タグ終了タグが1セットだけあるなら、 sed -ne 's/<TAG>\(.*\)<\/TAG>/\1/p'
445 名前:デフォルトの名無しさん mailto:sage [2006/11/16(木) 01:14:40 ] >>441 たとえば>433のawkスクリプトでやってることをシェルスクリプトで実現したらどうなるかとかってのを >441自身が率先してレスしてやるとかすればこのスレももっと進歩するんじゃないの? 絡まない話と切って捨てるのではなく絡める努力なんてこともしてみたらいかがか?
446 名前:デフォルトの名無しさん mailto:sage [2006/11/16(木) 01:20:07 ] AwkにはSYSTEM関数もあるし UNIXのコマンドも使えちゃうので 必ずしも無関係とは言えないか
447 名前:デフォルトの名無しさん [2006/11/17(金) 00:46:21 ] 寂しいスレになったね。
448 名前:デフォルトの名無しさん [2006/11/28(火) 00:16:29 ] あるファイルの一部(何行もある)を違うファイルに書き換えるのはどうやるの? 例えば、 aaa aaa aaa aaa aaa aaa abc 1 2 abc 3 4 bbb bbb bbb というファイルを abc 1 10 abc 3 20 と言うファイルを使って aaa aaa aaa aaa aaa aaa abc 1 2 10 abc 3 4 20 bbb bbb bbb にしたいんだけど。。 どえらく行があって普通にsedの置換する行を書かせて実行したら 一日で終わらないくらい時間がかかってしまって。。。 もしくは、行単位で置換じゃなくて、数行単位で置換は出来ないのでしょうか? 偉い人教えてください。
449 名前:デフォルトの名無しさん [2006/11/28(火) 02:05:01 ] >>448 正直説明が分かりづらいです。 というか全くわかんない。 ちゃんと質問した方が良い。 その質問じゃ法則がいまいちわからない。 ファイルの一部を違うファイルに書き換える?? catとか使って結合したらいかが?
450 名前:デフォルトの名無しさん mailto:sage [2006/11/28(火) 02:11:28 ] マルチ乙
451 名前:デフォルトの名無しさん mailto:sage [2006/11/28(火) 11:34:00 ] >>448 それはスペース区切りで先頭の項目をキーにして残りのデータは重複なしで マージするという処理をしたいということか? あれ? でも、 aaa とかは 元から重複してるな。 駄目だ。やっぱ法則が分からん。
452 名前:デフォルトの名無しさん mailto:sage [2006/11/28(火) 14:02:55 ] >>448 二つのファイルを第1フィールドと第2フィールドを“,”とかでくっつけて (それぞれ test1.txt, test2.txt とする)、join(1) する: join -a1 test1.txt test2.txt 最後に“,”を削る。 それか、awk の連想配列を使って join する。
453 名前:デフォルトの名無しさん [2006/11/28(火) 23:56:25 ] 回答ありがとうございました。 分かりずらかったかと思いますので再度書き込ませてください。 一連の序列が混ざったファイルがあります。 例えば、 aaa bbb ccc ddd . ccc ddd eee fff . こんな感じの序列が続いた後に linux 123 987 786 0 linux 123 903 673 linux 123 876 986 0 . linux 234 983 934 0 linux 234 073 345 0 . linux 345 093 945 0 linux 345 495 384 . xyz abc def ghi xyz ade dfe sdg . となっていて変えたいところはlinux〜です。
454 名前:デフォルトの名無しさん [2006/11/28(火) 23:57:11 ] ここの行を linux 123 987 786 22 linux 123 903 673 22 . linux 234 983 934 85 linux 234 073 345 85 . linux 345 093 945 45 linux 345 495 384 45 としたいのです。 最後の0はあったりなかったします。 最後の行に各々の22,85,45を追加(または0を置換)したいのです。 2列目は123,234,345のようにまとまりがあります。 あとはランダムです。 存在するファイルは 123 22 234 85 345 45 . というファイルです。
455 名前:デフォルトの名無しさん [2006/11/28(火) 23:59:27 ] 自分は一行ずつ置換するためsedを作成するためのプログラムを作成しました。 ですが、数が一万行を超えるので、一日ではとても終わらないものになりました。 ファイルを分割してlinuxを含まない上下のファイルをとっておいて、 置換ではなくてlinux〜のファイルを作ってしまいcatで付けようとか考えていますが、 cutとかで分割する際にそんな指定って出来るんでしたっけ? 質問ばかりですいません。 宜しくお願いします。
456 名前:デフォルトの名無しさん [2006/11/29(水) 00:10:55 ] 追加ですが、 linux 123 987 786 22 linux 123 903 673 22 . linux 234 983 934 85 linux 234 073 345 85 . linux 345 093 945 45 linux 345 495 384 45 というファイルは作成出来るのですが、 これを元のファイルに反映させたいです。 手動でやるしかないですかね。。。
457 名前:デフォルトの名無しさん [2006/11/29(水) 00:21:19 ] 元ファイルをtest1.dat 参照ファイルをtest2.datとして join -a1 -o 1.1 1.2 1.3 1.4 2.2 test1.dat test2.dat とすればいいですかね。。。 joinは使ったことが無いので分かりませんが。。。
458 名前:デフォルトの名無しさん mailto:sage [2006/11/29(水) 08:07:28 ] 例示ばかりで、肝心の変換のための法則について 何も書かれちゃいねぇ! 「変えたいところは」「ここの行を…としたい」 「あったりなかったりします」 場所と結果だけ示されてもねぇ。。
459 名前:デフォルトの名無しさん mailto:sage [2006/11/29(水) 08:12:43 ] ここはこうだから、これをこれと入れ換えます。 という説明はできないもんだろうか。 関係ないけど先日会社に面接に来た香具師。 「自己アピールは大切ですから」と言いつつ何ら具体的なことは何も言わないで帰った。 要は、客観視できていないし説明することもできないらしい。 #そのくせ、ランバ・ラルの台詞を語ってはいたのだが。
460 名前:デフォルトの名無しさん mailto:sage [2006/11/29(水) 08:17:11 ] 何か耳が痛いな。
461 名前:デフォルトの名無しさん mailto:sage [2006/11/29(水) 08:23:42 ] 言語機能の差が、スクリプト処理の決定的差ではないという事をおしえてやる
462 名前:デフォルトの名無しさん mailto:sage [2006/11/29(水) 11:23:46 ] 1万行の処理なんて一瞬で終わると思うんだが…… 仮に行数Lに対して実行時間が O(L^2) だとしてもちょっと待てば終わるくらいだと思
463 名前:デフォルトの名無しさん mailto:sage [2006/11/29(水) 12:06:13 ] すごい遅いマシン使ってるのかな?
464 名前:デフォルトの名無しさん mailto:sage [2006/11/29(水) 17:32:54 ] シェルスクリプトじゃないけど。awkでやってみた。 BEGIN{ while(getline<ARGV[2]){ cv[$1]=$2; } ARGV[2]=""; } $1=="linux"{ $5=cv[$2]; } { print; }
465 名前:デフォルトの名無しさん [2006/12/05(火) 21:39:41 ] csh で if($hoge == hoge) とかやったばあい、 $hoge が -f などの場合 ファイルに関する演算子の -f とみなされて 比較してくれません。 こういう場合、どうすればいいのでしょうか?
466 名前:デフォルトの名無しさん mailto:sage [2006/12/05(火) 22:17:11 ] あ、適当な文字を両辺の先頭に付ければいけますね。 何か格好悪いので、もっといい解決法があればよろしくお願いします。
467 名前:デフォルトの名無しさん [2006/12/06(水) 22:42:36 ] ファイル名の拡張子より前の名前を抽出するシェルを作っています。 例えばtest.shであれば ls test.sh | awk -F '[.]' '{print $1}' でtestと出力が得られるのですが、もしファイル名がtest_1.00.shの時は test_1 のような出力になってしまいます。 awkの$NFで拡張子のshは得られるのですが、 $NF「以外全て」を出力を得るにはどのようにすればよいでしょうか?
468 名前:デフォルトの名無しさん mailto:sage [2006/12/06(水) 22:48:02 ] >>467 man basenameでだめなんか。 それから、シェルスクリプトのことをシェル呼ぶなってば。
469 名前:デフォルトの名無しさん mailto:sage [2006/12/06(水) 22:49:51 ] シェルスク? シェクリ? ルスクリ?
470 名前:デフォルトの名無しさん mailto:sage [2006/12/06(水) 23:02:51 ] >>468 できますた。 ありがとうございました。
471 名前:デフォルトの名無しさん mailto:sage [2006/12/06(水) 23:13:44 ] >>467 awkでやるなら jgawk -F. "{print jsubstr($0,0,jlength($0)-jlength($NF)-1)}" でどう?
472 名前:デフォルトの名無しさん mailto:sage [2006/12/06(水) 23:28:06 ] >>471 試してみたのですが残念ながら、現在の環境ではjgawkというのが入ってないみたいです… basenameはcaseで知ってる拡張子を洗いざらい場合分けするスクリプトかいて処理しました。 (txt f90 c c++ java shなど) jgawkのインストールについて調べてみます
473 名前:デフォルトの名無しさん [2006/12/06(水) 23:29:05 ] c++じゃなくてcppだった…
474 名前:デフォルトの名無しさん [2006/12/06(水) 23:34:47 ] ちなみにローカルな目的は、 a2psを使ってpsファイルを作る事でした。 a2ps test1.00.sh -o test1.00.ps 拡張子を取り除いてpsの拡張子を付けるためのスクリプトを作る方法を考えていました。 basename&case文で対応はできたのですが、jgawkというのが使えるのであれば より汎用性のあるスクリプトができそうですね。
475 名前:デフォルトの名無しさん [2006/12/06(水) 23:40:59 ] ちなみに、gawkはありましたが $ gawk -F. "{print jsubstr($0,0,jlength($0)-jlength($NF)-1)}" test1.00.sh gawk: cmd. line:1: (FILENAME=test1.00.sh FNR=1) fatal: function `jsubstr' not defined でした。
476 名前:デフォルトの名無しさん mailto:sage [2006/12/07(木) 00:01:50 ] >>475 jgawkのjはJapanese(日本語)のj、 jlengthやjsubstrのjも同じ。 データーに日本語が入ってないならjは除けていいよ。
477 名前:デフォルトの名無しさん mailto:sage [2006/12/07(木) 00:27:39 ] >>467 Solaris のawkみたいに腐ったやつだとわからないけど、gawkなら NF--; print $0 で取れないか?
478 名前:デフォルトの名無しさん mailto:sage [2006/12/07(木) 00:33:01 ] >>477 jgawkでやったら aaa.bbb.ccc.dddが aaa bbb cccになった。
479 名前:デフォルトの名無しさん [2006/12/08(金) 01:05:00 ] NFってなに? Systemコマンドの使い方教えて
480 名前:477 mailto:sage [2006/12/08(金) 01:21:03 ] >>478 スマソ。OFSを設定してクレイ。 gawk -F'[.]' -v OFS='.' '{NF--; print} あたりでよろしこ。
481 名前:デフォルトの名無しさん [2006/12/13(水) 21:04:58 ] shellってすごいね
482 名前:デフォルトの名無しさん mailto:sage [2006/12/22(金) 23:27:33 ] #!/bin/sh dump -0f /path/to/hda1.dump /dev/hda1 dump -0f /path/to/hda2.dump /dev/hda2 このスクリプトを実行して、hda1の実行途中でCtrl+Cを押したら hda1は終了するけど次行のhda2のバックアップが開始されます。 スクリプト自体を終了するにはどうしますか?
483 名前:デフォルトの名無しさん [2006/12/24(日) 10:47:11 ] >>482 dump は使ったことないので、勘ですが dump -0f /path/to/hda1.dump /dev/hda1 if [ $? -ne 0 ] then dump -0f /path/to/hda2.dump /dev/hda2 fi じゃ、だめですか?
484 名前:デフォルトの名無しさん mailto:sage [2006/12/24(日) 12:55:55 ] #!/bin/sh -e dump -0f /path/to/hda1.dump /dev/hda1 dump -0f /path/to/hda2.dump /dev/hda2
485 名前:デフォルトの名無しさん [2006/12/26(火) 23:54:08 ] sedで-dオプションを使って、特定の文字列がヒットした時に、 その行を削除したいのですがうまくいきません。 manpageみても使い方がよくわからず、困り果てております。 どうやって使えばいいかご教授お願いします。
486 名前:デフォルトの名無しさん mailto:sage [2006/12/26(火) 23:58:45 ] >>485 -dオプション??? 単純に行削除だけなら例えば以下のように。 -- sed -e '1,5d' #最初の5行を削除 sed -e '/pattern/d' #patternを含む業を削除
487 名前:デフォルトの名無しさん [2006/12/27(水) 06:42:35 ] >>486 使い方思いっきり間違ってました ありがとうございます 助かりました
488 名前:デフォルトの名無しさん mailto:sage [2006/12/27(水) 17:11:03 ] てか、パターンを含む行を削除したいだけなら grep -v でやれば良い。
489 名前:デフォルトの名無しさん mailto:sage [2006/12/28(木) 01:09:04 ] きっとgrepでは業(カルマ)を削除できないのだろう。
490 名前:デフォルトの名無しさん [2006/12/29(金) 16:00:50 ] sedでレコードのor検索やand検索ってできますか?
491 名前:デフォルトの名無しさん mailto:sage [2006/12/29(金) 16:12:11 ] RDBでいうレコードの概念は、区切り文字とのパターンマッチでおおよそシミュレート可能。 その上で、パターン/X/と/Y/のandは/X/{/Y/}で、orは /X/... /Y/... でシミュレート可能。
492 名前:デフォルトの名無しさん [2006/12/30(土) 12:08:44 ] 例えばレコードの100バイト目から105バイト目を置換したいんだけど、 全角・半角が不規則に混ざっているので、 s/(.{100,100})......)/\1abcdef/ とか正規表現でやってもうまくいかないんだよね。 良い方法あるかな? ちなみにUNIX、sedでやるつもり。
493 名前:デフォルトの名無しさん mailto:sage [2006/12/30(土) 15:00:03 ] >>492 多バイト文字を途中でぶった切ってもいいの? $ LC_ALL=C sed -e 's/^\(.\{99\}\)\.\{6\}/\1abcdef/' とか。LC_ALLは状況しだいでLANGとかLC_COLLATEあたりでもOK。 あとこの正規表現はGNU sed でないと多分食ってくれない。
494 名前:492 mailto:sage [2006/12/30(土) 23:40:41 ] うちはcshなので env LC_ALL=C sed 〜 って感じですね! ありがd! 後いい忘れたけど固定長ファイルで置換部分は必ず1バイト文字なのでぶった切られることはないです。
495 名前:デフォルトの名無しさん mailto:sage [2007/01/02(火) 14:18:06 ] RDB=ラーメンデータベース
496 名前:デフォルトの名無しさん mailto:sage [2007/01/03(水) 00:18:43 ] よく勘違いされてるんだけど、 ラーメン(Rahmen)というのはドイツ語で、 英語のframeに相当する単語なんだ。 だから「枠」とか「骨格」とか「軸組み」とかいうような ニュアンスなんだよ、本来であれば。
497 名前:デフォルトの名無しさん mailto:sage [2007/01/03(水) 09:39:49 ] ラーメン違い。本来も糞もない。
498 名前:デフォルトの名無しさん mailto:sage [2007/01/03(水) 12:33:20 ] 遅レス気味すまそ。 >>483 そういうの書くなら dump -0f path/to/hda1.dump /dev/hda1 || exit 1 と || exit の方が、見やすくって良くないか。
499 名前:デフォルトの名無しさん mailto:sage [2007/01/05(金) 01:26:49 ] 質問があります。 Vine4.0を使用していまして #!/bin/sh declare -i MAX MAX=10 while[ $MAX -lt $1 ] do echo $MAX MAX=$MAX+1 done というスクリプトを書いたのですがいざ実行してみると下記のようなエラー?がでてしまします。 command not foundということは何かがたりないのでしょうか? アドバイスお願いします。 . a05.sh 12 bash: while[ 10 -lt 12 ]: command not found bash: a05.sh: line 5: syntax error near unexpected token `do' bash: a05.sh: line 5: `do'
500 名前:デフォルトの名無しさん mailto:sage [2007/01/05(金) 02:35:36 ] whileの後ろに空白がないんじゃないか?>499
501 名前:デフォルトの名無しさん mailto:sage [2007/01/05(金) 03:45:07 ] >>499 空白入りの引数を渡すとエラーを吐くから $1 の所をクォートしておくと吉
502 名前:499 mailto:sage [2007/01/06(土) 02:58:14 ] >>500 ,501 whileの後ろに空白をいれたら無事に動作しました。 クォートとは''の事ですよね?参考になりました。 ありがとうございました。 新しい質問なんですけど #!/bin/bash while [ -f .count.lock ]; do sleep 0.1 done touch .count.lock declare -i INTEG INTEG='cat access_count.txt' INTEG=$INTEG+1 echo $INTEG >| access_count.txt echo "$INTEG" rm -f .count.lock を動作させると bash: cat access_count.txt: syntax error in expression (error token is "access_count.txt") 15 ←access_count.txtの内容を書き換えてもどんどんインデントされていきます。 の様に吐き出されてしまいます。 INTEG='cat access_count.txt'の部分が悪い様なのですがINTEGにcatを使って ファイルの内容を代入することはできないのでしょうか? access_count.txtの中身は 0 とだけ入っています。 よろしくお願いします。
503 名前:デフォルトの名無しさん mailto:sage [2007/01/06(土) 03:33:25 ] コーテーションの向きを確認すべきかと
504 名前:492 mailto:sage [2007/01/06(土) 11:02:47 ] すいません、また来ました… \{99\}使えんかったorz .を99個書くしかないんかね〜
505 名前:デフォルトの名無しさん mailto:sage [2007/01/06(土) 21:31:43 ] >>504 sedを使わない方法 (dd bs=1 count=99;dd bs=6 count=1 of=/dev/null; echo -n abcdef; cat)
506 名前:デフォルトの名無しさん mailto:sage [2007/01/07(日) 02:48:47 ] >>504 使ってる sed がGNU sedでないとかない? echo abcdefghijklmn | sed -e 's/^\(.\{5\}\).../\1XXX/' で abcdeXXXijklmn になるよ(Fedora Core5) あと、493は後ろのドットに余計な\がついてるからそれはとっておくんなまし。
507 名前:デフォルトの名無しさん mailto:sage [2007/01/10(水) 15:39:41 ] >>504 awk '{print substr(1, 99, $0) "12345" substr($0, 105)}' hoge.txt
508 名前:デフォルトの名無しさん mailto:sage [2007/01/10(水) 23:38:53 ] >>504 printf "%099d\n" |tr 0 \.
509 名前:504 mailto:sage [2007/01/16(火) 00:52:23 ] やっぱawkじゃね〜 サンクスコ
510 名前:デフォルトの名無しさん mailto:sagw [2007/01/16(火) 17:35:01 ] ちょいとawkスクリプトでお尋ねしたいんだが、 2つ以上のファイルから文字列の切り出しってできますかね? 色々試してみたのだけれど全然できなかったんで hoge1.dat の$1,$3 と hoge2.dat の$5,$2 を 1行でhogehoge.datに出力という形 GMTっていうマイナーなツールで絵を描いてるんだけど、GMT内の計算スクリプトで出たデータのお尻に 別のデータを加えてそのまま描けないかなぁって試行錯誤してるんですが。
511 名前:デフォルトの名無しさん mailto:sage [2007/01/16(火) 17:44:04 ] できます。しかし、残念ながらスレ違いにつきawkスクリプトは割愛。