[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 2chのread.cgiへ]
Update time : 02/10 13:03 / Filesize : 248 KB / Number-of Response : 977
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

シェルスクリプト相談室



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スクリプトは割愛。






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<248KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef