1 名前:名無しさん@お腹いっぱい。 [2009/07/01(水) 09:42:48 ] シェルスクリプトの総合スレです。 スクリプトのお勉強・自慢・腕試しなどにどうぞ。 まずは注意点、リンク、地鎮祭など(>>1-6 くらい)をご覧ください。 □お約束 ・特記なき場合はBourne Shell(/bin/sh)がデフォルトです。 bash/zsh/ksh/ashなどに依存する場合は明示しましょう。 Linuxユーザは/bin/shの正体がbashなので特に注意。 FreeBSDユーザは/bin/shの正体がashなので注意。 v7 shに一番近くて、現役のshは、OpenSolaris由来のheirloom sh。 src.opensolaris.org/source/xref/onnv/onnv-gate/usr/src/cmd/sh/ heirloom.sourceforge.net/sh.html ・csh/tcshのシェルスクリプトは推奨されません。 (理由は「csh-whynot」でググれ) ・UNIXにはシェルスクリプトに便利な小さなコマンドがいろいろあります。 manや参考リンクを見ましょう。 aproposないしはman -kでそれらしい単語による簡単な検索もできます。 ・シェルスクリプトのことをシェルってゆーな ・シェルで使えるワイルドカード等は正規表現ではありません。 正規表現の話題はスレ違い(正規表現スレへ) □初心者へのアドバイス: ・適した道具を判断するのも頭の重要な使い方。シェルスクリプトよりも RubyやPerlの方が適した仕事には素直にそちらを使いましょう。 ・知らないコマンドが出てきたらmanを引きましょう。 ・思い通りに動かないときは、まずは sh -x でトレースしましょう。 前スレ シェルスクリプト総合 その14 pc12.2ch.net/test/read.cgi/unix/1233179688/
2 名前:名無しさん@お腹いっぱい。 [2009/07/01(水) 09:45:39 ] □関連スレ: sed pc12.2ch.net/test/read.cgi/unix/1085730992/ 正規表現 pc12.2ch.net/test/read.cgi/unix/1039165754/ おまえら! shell は何を使っているんですか? pc12.2ch.net/test/read.cgi/unix/1012330865/ Eshell の使い方とか設定とか【Emacs Shell、Lisp】 pc12.2ch.net/test/read.cgi/unix/1102921590/ □初心者向けリンク 「誰にでも」シリーズ ttp://kanji.zinbun.kyoto-u.ac.jp/~yasuoka/publications/dareUni/ /bin/shプログラミング入門 ttp://freebooks.info.nara-k.ac.jp/archive/ShellProgramming/ シェルを使おう - 導入からプログラミングまで - ttp://www.netfort.gr.jp/~tomokuni/lms/shell/text/ □入門者向け書籍: プロフェショナルシェルプログラミング www.amazon.co.jp/exec/obidos/ASIN/4756116329/ 入門UNIXシェルプログラミング―シェルの基礎から学ぶUNIXの世界 www.amazon.co.jp/exec/obidos/ASIN/4797321946/ UNIXシェルプログラミング徹底解説 www.amazon.co.jp/exec/obidos/ASIN/4822280489/ 入門Kornシェル www.amazon.co.jp/exec/obidos/ASIN/4873110149/ 入門bash www.amazon.co.jp/exec/obidos/ASIN/4900900788/
3 名前:名無しさん@お腹いっぱい。 [2009/07/01(水) 09:46:30 ] □参考リンク: UNIXの部屋 (沢山のコマンドの簡単な紹介など) x68000.q-e-d.net/~68user/unix/ POSIX: Shell & Utilities (標準規格) www.opengroup.org/onlinepubs/009695399/utilities/contents.html □最近のシェルスクリプト本(1) (2004/03) UNIXシェルスクリプトハンドブック 関根 達夫 (著) amazon.co.jp/o/ASIN/4797326522/ (2004/10) UNIXシェルスクリプト逆引き大全333の極意 中橋 一朗 (著) amazon.co.jp/o/ASIN/4798008842/ (2004/11) 仕事に使えるLinuxシェルスクリプト 千葉 真人 (著) amazon.co.jp/o/ASIN/4822282090/ (2004/12) UNIXシェルスクリプトサンプルブック デイブ・テイラー (著) amazon.co.jp/o/ASIN/4797327286/ (2005/02) シェルスクリプト基本リファレンス 山森 丈範 (著) amazon.co.jp/o/ASIN/4774122610/ (2005/04) LinuxWorldスクリプト 月刊リナックス・ワールド総集編 月刊LinuxWorld特別 (著) amazon.co.jp/o/ASIN/4872802349/ (2005/05) UNIXシェルスクリプトコマンドブック 山下 哲典 (著) amazon.co.jp/o/ASIN/4797330635/ (2005/05) わかる&使える UNIX基礎講座 シェルスクリプト編 中井 獏 (著) amazon.co.jp/o/ASIN/4774123625/
4 名前:名無しさん@お腹いっぱい。 [2009/07/01(水) 09:48:31 ] □最近のシェルスクリプト本(2) (2005/07) UNIX シェルスクリプト辞典 川井 義治 (著) amazon.co.jp/o/ASIN/4798109231/ (2005/08) シェルスクリプト ポケットリファレンス bash編 宮原 徹 (著), 川原 龍人 (著) www.amazon.co.jp/o/ASIN/4774124818/ (2005/12) 図解でわかるLinuxシェルスクリプト・正規表現 小泉 修 (著) www.amazon.co.jp/o/ASIN/4534040067/ (2006/01)詳解 シェルスクリプト アーノルド ロビンス (著), ネルソン・H.F. ベーブ(著), Arnold Robbins (原著), Nelson H.F. Beebe (原著), 日向 あおい (翻訳) www.amazon.co.jp/o/ASIN/4873112672/ (2007/3) Linuxシェルスクリプトユーザー便利帳―bash2/bash3対応 伊藤 幸夫 (著), 寒川 陽美(著) www.amazon.co.jp/o/ASIN/4798015954/ (2007/9) ゲームで極める シェルスクリプトスーパーテクニック 山森 丈範 www.amazon.co.jp/o/ASIN/4774132020/ (2007/10) UNIX/Linuxシェルスクリプトマスタリングハンドブック 野川 准子 www.amazon.co.jp/o/ASIN/4798017957/
5 名前:名無しさん@お腹いっぱい。 [2009/07/01(水) 09:49:46 ] □関連書籍と関連リンク: FreeBSD Hypertext Man Pages www.freebsd.org/cgi/man.cgi Linux JF (Japanese FAQ) Project. www.linux.or.jp/JF/ Unix Programming Frequently Asked Questions 日本語訳 www.adl.nii.ac.jp/~moro/unix-programmer/faq-j_toc.html UNIXプログラミング環境 www.amazon.co.jp/exec/obidos/ASIN/4871483517/ □人間初心者へのお願い: ・このスレはシェルスクリプトについてのスレです。 シェルの対話的な利用についての話やスクリプトと関係ないコマンドの 使い方の質問などはスレ違いなので無用に願います。 □シェルスクリプトでよく使うコマンド: 制御・条件判定系: [,test,expr,true,false,yes,getopts テキスト処理系: cat,awk,sed,tr,sort,uniq,grep,wc,head,tail,cut,paste,comm,join ファイル検索系: find (スペースなどを含むファイル名を正しく処理するため、 findは -exec command {} + を推奨。 他に -print0、xargsは -0オプションという方法もあるがSolaris非対応) ディレクトリ系: basename,dirname 出力系: echo,printf 対話コマンド制御系: expect http/ftpの処理自動化: wget,curl
6 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/01(水) 10:57:14 ] 回答者側の心得: エスパー以外回答禁止 わからないなら無理に回答せず、黙っていましょう あなたが回答しなくても、もっと詳しい回答者がより的確に回答してくれます 無理に中途半端な回答をすると、回答者同士で叩き合いが始まり、スレのS/N比が悪化します
7 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/02(木) 00:49:01 ] 2005年は、最近ですか?
8 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/02(木) 09:10:15 ] 地球の歴史からすれば一瞬
9 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/02(木) 11:05:46 ] 中国の歴史からしても1‰
10 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/02(木) 11:13:19 ] 中国400年の歴史?
11 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/02(木) 11:58:24 ] ‰を知らないゆとり乙
12 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/02(木) 12:08:38 ] 中国は建国60年 つまり >中国の歴史からしても1‰ は0.6年、61日
13 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/02(木) 12:09:35 ] 219日だw
14 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/02(木) 13:14:42 ] 句点の。に見えたわorz
15 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/05(日) 03:20:29 ] ftpであるディレクトリ配下をまるまるダウンロードするために、 ローカルに同じディレクトリ構造を作りながらファイルを1個づつダウンロードしていくシェルをつくりたいんですが ftpでのdir結果をファイルに落としてそれを読んでって感じになりますかね? 簡単そうな方法があるとうれしいんですが?
16 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/05(日) 03:32:17 ] 簡単な方法なら wget -r だが
17 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/05(日) 16:48:05 ] >>12 最近はパーミル習わないのか
18 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/05(日) 18:56:12 ] >>17 円周率を3と習う世代に無理を言っちゃいかん。
19 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/08(水) 12:49:23 ] シェルの本で定番は何ですか?
20 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/08(水) 12:59:59 ] 「たった3日でシェルが書ける、シェル自作入門」 〜 シェルで始める Hello World 〜 とか?
21 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/08(水) 13:05:47 ] 「ゲームで極める シェルスクリプトスーパーテクニック 」 シェルスクリプトでここまでできる。ゲームを作ってシェルスクリプトの超技を学べ。
22 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/08(水) 13:08:42 ] おもわずググっちまったorz
23 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/08(水) 13:17:05 ] >>22 see >>4
24 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/08(水) 13:18:29 ] いや、自作の方な
25 名前:名無しさん@お腹いっぱい。 [2009/07/10(金) 00:53:20 ] 質問です。 たとえば、以下のような仮のhogeコマンドを実行すると、 $ hoge -12 hoge.dat foo.dat bar.dat パラメタで指定したファイル(hoge.dat、foo.dat、bar.dat)の12行目だけをリストするようなコマンドはないでしょうか? よろしくお願いします。
26 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/10(金) 01:14:30 ] シェルスクリプトスレなのに、単一のコマンドでないといかんのか? でないなら for i in hoge.dat foo.dat bar.dat; do sed -n 12p "$i"; done とか、 cat -n hoge.dat foo.dat bar.dat | egrep '^ *12^I' とか。 「コマンド」風にしたいなら、関数にするなり、別のスクリプトにするなり。
27 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/10(金) 06:43:11 ] >>26 シェルスクリプトスレで質問してるんだから、 $ hoge -行番号 ファイル... という形式の引数を渡せるようなシェルを書いて回答してやれよ。 例えば、-12 で渡された引数を、sedの中に 12p の形に渡すためには 文字列の変換処理とかがちょっと必要になるだろ。 そのあたりも含めての質問だと思うが。
28 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/10(金) 09:16:55 ] シェルを書いて回答してやれよ(笑)
29 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/10(金) 09:47:48 ] >>26 2つ目の、cat -n の例、それじゃ駄目だろ。 全部のファイルに通し番号で番号が付いちゃうから。
30 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/10(金) 10:04:15 ] 俺のcatはファイルごとに1から始まるぞ
31 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/10(金) 10:06:41 ] どこの方言OSのcatですか?
32 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/10(金) 10:30:33 ] OpenSolarisとFreeBSDとNetBSDです。おたくはどちらのご出身で?
33 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/10(金) 10:51:08 ] >>25 awk 'FNR==12{print}' が単純でエレガントでは。パイプやループが要らないし。
34 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/10(金) 11:02:28 ] あ、シェルにするには、 #!/bin/sh n=$1 shift awk "FNR==-($n){print}" "$@" ね。-12とかの引数をマイナスの数とみなして、awkの中で符合反転してる。
35 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/10(金) 13:05:32 ] シェルにする、とな!
36 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/10(金) 15:19:28 ] >>32 みえすいた嘘付くな。 $ uname -a SunOS opensolaris 5.11 snv_111b i86pc i386 i86pc Solaris $ cat hoge boke kasu $ cat -n hoge hoge 1 boke 2 kasu 3 boke 4 kasu
37 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/10(金) 21:10:31 ] >>36 $ uname -a FreeBSD freebsd.example.com 7.2-RELEASE FreeBSD 7.2-RELEASE #2: Fri May 22 10:29:03 JST 2009 root@freebsd.example.com:/usr/obj/usr/src/sys/GENERIC i386 $ cat -n /etc/ntp.conf /etc/ntp.conf 1 server ntp1.jst.mfeed.ad.jp 2 server ntp2.jst.mfeed.ad.jp 3 server ntp3.jst.mfeed.ad.jp 1 server ntp1.jst.mfeed.ad.jp 2 server ntp2.jst.mfeed.ad.jp 3 server ntp3.jst.mfeed.ad.jp
38 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/10(金) 21:11:39 ] ちなみに GNU の cat だと連続する。 $ gcat -n /etc/ntp.conf /etc/ntp.conf 1 server ntp1.jst.mfeed.ad.jp 2 server ntp2.jst.mfeed.ad.jp 3 server ntp3.jst.mfeed.ad.jp 4 server ntp1.jst.mfeed.ad.jp 5 server ntp2.jst.mfeed.ad.jp 6 server ntp3.jst.mfeed.ad.jp
39 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/10(金) 21:19:02 ] ntp.nict.jp 使ってやれよ!
40 名前:名無しさん@お腹いっぱい。 [2009/07/10(金) 21:51:19 ] >>39 Stratum 2 で充分だよ。
41 名前:名無しさん@お腹いっぱい。 [2009/07/11(土) 14:58:42 ] >>36 > みえすいた嘘付くな。 デフォルトだと/usr/gnu/binにあるcatが動くのも知らんのか。 わざわざインストールしてみたりしたんだろうか。 GNU以外でcat -nの番号が連続する実装ってある?
42 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/11(土) 17:42:32 ] >>33 >>34 のエレガントな解が出た今となっては、 cat -n(笑)を使うようなかっこ悪い解はどうでもよい。
43 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/11(土) 19:55:16 ] かっこ悪(笑)
44 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/11(土) 21:51:28 ] (command) って command ってやるのと何か違います?
45 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/11(土) 22:23:25 ] デヴャブ
46 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/11(土) 23:47:08 ] >>39 3msくらい遠い。ジッタは大差ない。
47 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/12(日) 01:38:50 ] >>44 一例 cd / ; cd /tmp ; pwd cd / ; ( cd /tmp ) ; pwd
48 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/12(日) 06:48:20 ] >>47 それは当然知ってる。 コマンド1個だけの場合に、 command と (command) に違いがあるかどうかを聞いてるんだが。
49 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/12(日) 07:00:54 ] >>44 シェルによっては、シェル自身の最適化で、 ( ) を付けていてもサブシェルの必要がない場合はサブシェルにはしないため、 (command) と command に違いはない。
50 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/12(日) 08:32:03 ] >>48 有る。
51 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/12(日) 08:41:05 ] ash zsh ksh では (command) と command に違いはないようだ。(トレースして確認)
52 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/12(日) 12:45:20 ] それらにおいても unset PATH と (unset PATH) は動作が違う気がする
53 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/12(日) 14:01:37 ] >>52 それはあたりまえ。で、そんなことは聞いてない。 >>49 > 「サブシェルの必要がない場合はサブシェルにはしない」 欲嫁。
54 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/12(日) 14:09:27 ] >>48 そこまでいくと実装依存的な話になる気がするけど 誰かに " (command) と command に違いは無い " とでも言って欲しいの? で誰かがそういったところで保証される訳でもなし " (command) と command " に違いはないから今後は " command "で書こうって話にはならない 逆に " (command) と command " に違いがないから作成中のスクリプトで「今困ってる」っていうなら そこまで動作を調べられる>>48 なら解決方法も分かってるだろ? バカなの?
55 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/12(日) 14:14:05 ] バカで〜す
56 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/12(日) 14:48:35 ] >>54 > 実装依存的な話になる気がするけど すでに、>>51 が、 > ash zsh ksh では (command) と command に違いはないようだ。 って(実装依存を前提として)答えてるのに、いまさら「気がするけど」って何? 補足したいなら、>>51 が調べた以外のシェルではどうなってるか試して レポートするべきじゃないの?
57 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/12(日) 17:08:44 ] ___ モシャモシャ / \ / ⌒ ⌒ \ / (●) (●) \ >56なに言ってんだこいつ | 、" ゙)(__人__)" .)| ___________ \ 。` ⌒゚:j´ ,/ j゙~~| | | | __/ \ |__| | | | | | / , \n|| | | | | | / / r. ( こ) | | | | | | ⌒ ーnnn |\ (⊆ソ .|_|___________|  ̄ \__、("二) ̄ ̄ ̄ ̄ ̄l二二l二二 _|_|__|_
58 名前:amatsuno ◆Z7H81aEWFM [2009/07/13(月) 12:42:35 ] テストします。 次で質問させて下さい
59 名前:amatsuno ◆y1bfd53lWE [2009/07/13(月) 13:02:32 ] 質問させて下さい。 AIX(ksh)で、以下を行おうとしています。 コマンドなどわかりましたら、教えて下さい。 やりたいこと) csvファイルを読み込んで、データを抜きだす。 csvファイル) A_table,3,DEF_ind,JKL_ind,TUV_ind,out.txt のように書かれたリストが複数行有ります。 出力ルール) csvファイルの第1カラム目に書かれたテーブルを見て、 その中から該当の文字列を呼び出します。 該当の文字列は、 第2カラムで指定された数字分、第3カラム目から先のカラムに書かれたものになります。 (上記の場合、第2カラム目が3なので、第3カラム目から第5カラム目までとなります) そしてその出力を最終カラムで指定したファイルに出力します。 上記の出力結果は、 DEF_ind JKL_ind TUV_ind をout.txtに出力します。 すいませんが、 わかるかた、宜しくお願いいたします。
60 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/13(月) 13:21:29 ] >>59 ほれ、 awk -F, '$1=="A_table"{out=$($2+3);for(i=1;i<=$2;i++)print $(i+2)>>out}'
61 名前:amatsuno ◆y1bfd53lWE [2009/07/13(月) 13:47:11 ] >60 ありがとうございます。 ただこれを実行したところ、1箇所だけ問題があるようで、 3カラム目から先が永遠に出力されてしまい、ひたすら空白行が出ます。 第2カラム目で指定しらカラム数で止めるには、 どうすれば良いのでしょうか? たびたびで申し訳ございませんが、宜しくお願いいたします。
62 名前:amatsuno ◆y1bfd53lWE [2009/07/13(月) 13:51:46 ] >60 もうしわけございません。 61はデータ側の問題でした。 スクリプトは完璧でした。 誠に申し訳ございません。 ありがとうございました。
63 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/13(月) 14:02:13 ] 不正なデータとして、 第2カラムが数値以外だと、ループがおかしくなるな。 そういう場合でも安全なように、 for(i=1;i<=$2;i++) を、 for(i=1;i<=$2+0;i++) にしておいた方がいいかも。
64 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/13(月) 14:13:42 ] >>59 >>60 awkはシェルにあらず。 シェルスレならシェルで解決。 #!/bin/sh IFS=, while read line do set $line case $1 in A_table):;;*)continue;;esac shift max=$1 shift eval out=?$$# i=1 while [ $i -le $max ]; do echo "$1" shift i=`expr $i + 1` done > "$out" done
65 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/13(月) 14:19:55 ] awkも可だよ。
66 名前:amatsuno ◆y1bfd53lWE [2009/07/13(月) 14:33:33 ] >>64 このawkを含んだ処理のkshは、 1.リストからデータの抜き出し 2.抜いたデータのインデックス検索 3.インデックス検索でたデータのバックアップ 4.バックアップデータのソート になります。 その一部でしたので、 ここで質問させていただきました。
67 名前:名無しさん@お腹いっぱい。 [2009/07/13(月) 23:23:55 ] 質問させてください。 テキストファイルの最後からN行を削除するにはどうしたらいいでしょうか? 例えばa.txtの最後から2行を削除して保存したいです。よろしくお願いします。
68 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/13(月) 23:36:53 ] >>67 head -n `expr ?`wc -l < a.txt?` - 2` a.txt
69 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/13(月) 23:39:34 ] >>68 「保存」してねえぞ (echo '$-1,$d'; echo wq) | ed -s a.txt
70 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/13(月) 23:41:10 ] >>68 全角?はなんのおまじない?
71 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/13(月) 23:43:51 ] >>69 printfコマンドって、使えない環境もあるのかな。 あと「wq」は使えなくて「w」と「q」の2コマンドなら OKという環境はよくあるね。
72 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/13(月) 23:44:10 ] >>69 ありがとうございます。 でも結構難しいですね。もうちょっと簡単に短くできませんでしたっけ?
73 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/14(火) 00:47:11 ] 度々すみません。 たしかheadで出来たと思うのですが a.txtの最後から2行を削除して保存。とか出来ませんでしたっけ?
74 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/14(火) 01:09:23 ] 保存はともかく、 末尾の指定行数をカットできるのはGNUのおせっかいheadくらいじゃないか
75 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/14(火) 07:38:51 ] >>70 半角バックスラッシュが?に化ける模様。 そう解釈すれば >>68 が正解。
76 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/14(火) 08:06:31 ] Safari@Macかね?
77 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/14(火) 16:19:50 ] >>71 >printfコマンドって、使えない環境もあるのかな。 SunOS4 とか。
78 名前:amatsuno ◆y1bfd53lWE [2009/07/14(火) 17:52:11 ] この前はありがとうございました。 もうひとつ教えて下さい。 前回教えていただきましたリストを1行にまとめる方法を教えて下さい。 変更前のファイル(b_ind)の中身);0 DEF_ind JKL_ind TUV_ind 変更後のファイル(a_ind)の中身); DEF_ind,JKL_ind,TUV_ind 上記では3行ですが、実際は1-8のいずれかの行数となります。 このような複数行をカンマ区切りの1行にしたいのです。 DBからバックアップを取る時の指定のインデックスのため、 カンマ区切りの1行記載が必要となりました。 すいませんが知っている方、 宜しくお願いいたします。
79 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/14(火) 18:01:02 ] >>78 >>60 のスクリプトをちょっと修正すればいいだけだよ。 awk -F, '$1=="A_table"{out=$($2+3);for(i=1;i<$2+0;i++){printf $(i+2) ",">>out}print $(i+2)>>out}'
80 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/14(火) 19:17:06 ] >>78-79 awkはシェルにあらず。 シェルスレならシェルで解決。 #!/bin/sh IFS=, while read line do set $line case $1 in A_table):;;*)continue;;esac shift max=$1 shift eval out='$'$# i=1 while [ $i -lt $max ]; do echo -n "$1", shift i=`expr $i + 1` done > "$out" echo "$1" >> "$out" done
81 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/14(火) 21:01:22 ] 経験的にsedとawkはrcスクリプトで使われてるのでOK
82 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/14(火) 21:16:41 ] 経験的にイマドキのOSはrcスクリプト自体を使わないのでNG
83 名前:amatsuno ◆y1bfd53lWE [2009/07/15(水) 09:40:43 ] >>79 できました。 ありがとうございます。
84 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/15(水) 16:09:35 ] >>82 テンプレ読み直してこい あまりキチガイめいたこと言うなよ
85 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/16(木) 00:53:20 ] #!/bin/rc もベル研純正シェル
86 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/17(金) 21:39:49 ] >>34 awkはシェルにあらず。 シェルスレならシェルで解決。 #!/bin/bash n=$((-$1)) shift for file in "$@"; { i=1 while IFS= read -r line do ((i++ == n)) && { echo "$line" break } done < "$file" }
87 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/17(金) 21:52:56 ] bash使うなよ
88 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/17(金) 22:25:33 ] bashはLinux板でやれ
89 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/17(金) 22:39:05 ] >>87-88 bashに過剰反応するな。 kshでもzshでも動くから、bash依存とまでは言えない。 #!/bin/ksh n=$((- $1)) shift for file in "$@"; { i=1 while IFS= read -r line do ((i++ == n)) && { echo "$line" break } done < "$file" }
90 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/18(土) 00:36:24 ] POSIX準拠だから#!/bin/shでもいいはず、といってみる
91 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/18(土) 01:40:37 ] /bin/shにはPOSIX shellを置く、なんてことはPOSIXに書いてない
92 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/21(火) 13:50:12 ] シェルスクリプトでドラッグアンドドロップできる?
93 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/21(火) 14:12:21 ] >>92 目的は何?
94 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/21(火) 14:32:02 ] >>93 目的がわかっても答えられないのに逆質すんな。
95 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/21(火) 14:38:10 ] あぁ、釣りか。 つられちゃったw てへっ?☆
96 名前:92 mailto:sage [2009/07/21(火) 15:19:06 ] ちょっと思いついたので聞いてみただけです。目的はありません。
97 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/22(水) 01:01:27 ] シェルスクリプトで手マンできますか?
98 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/22(水) 01:03:03 ] >>97 目的は何?
99 名前:sage [2009/07/22(水) 15:28:06 ] 質問させてください。 標準入力から入力した値を処理するシェルスクリプト(Bシェル)を作成しています。 入力値に\(バックスラッシュ)が入る可能性があるので、 readのオプションに「-r」を付けて、入力値をすべて受け取れるようにしようと思ったのですが、 「-r」オプションをつけると「英数字以外の文字が使用されています。」というメッセージが出力され オプションが使えないようです。 例) OS:Solaris10 $ cat aaa.sh #!/bin/sh read aaa echo $aaa read -r ppp echo $ppp $ $ ./aaa.sh III ←コマンドラインから入力 III ←出力 ./aaa.sh: -r: 英数字以外の文字が使用されています。 ←オプションを付けたreadに対してのエラーメッセージ 質問ですが、Bシェルでは、readに「-r」オプションは使えないのでしょうか? (manを見る限り使えないとは言ってないように思われたのですが) もし、使えないとすると、何か他に方法をご教授頂けないでしょうか? (出来る限りBシェルでしたいと考えているのでこのコマンドだけkshで実行するなどでしょうか) よろしくお願いします。
100 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/22(水) 15:45:09 ] どうみても使えるとは書いていませんが、何を見ているのでしょうか? docs.sun.com/app/docs/doc/816-5165/sh-1?l=Ja&a=view