1 名前:login:Penguin mailto:sage [2008/05/17(土) 13:44:57 ID:9hFWtCOD] UNIX板のスレを見ている方も多数おられるかと思いますが、 まあそれはそれとして、BASHウゼーとか言われる心配なく 平和にLINUX的スクリプト談義しましょうよ。 初めての自作スクリプト、自信ないから見てください。な初心者から トリッキーな技を駆使した作品を披露したい、蘊蓄を語りたい上級者まで いろいろな人に参加して頂けると嬉しいです。 perlやらPythonやらの話が混ざっても良いんでない? Part3 : pc11.2ch.net/test/read.cgi/linux/1184077033/ Part2 : pc11.2ch.net/test/read.cgi/linux/1154578200/ Part1 : pc8.2ch.net/test/read.cgi/linux/1121994321/ >>2-5 あたりに色々と。
47 名前:login:Penguin [2008/06/02(月) 18:36:56 ID:GT1ocSub] すみません。くだ質から誘導されてきました。よろしくお願いします。 bangou.txtには ▲ 123123 123123 100000 ▲ ▲ というように数値が入っています。(▲は空白ですが改行コードがはいってます) この場合、1行目と3行目を比較して3行目に数値が入っている場合のみ2行目の値を別表に表示する スクリプトを作りたいと思って色々調べて以下のようなスクリプトを作ってみましたけど うまく動きません。(空白は空白として認識してくれないと行がずれるのでそれも認識したいです) #!/bin/bash for iii in `cat bangou.txt` do jjj=`sed -n '2p' bangou.txt` export jjj kkk=`sed -n '3p' bangou.txt` export kkk if [ "$iii" = -n ] then echo "$kkk>/dev/null else echo "$jjj > jjj.txt paste jjj.txt toku.txt >> toku2.txt rm -rf jjj.txt fi done どこか間違ってるんでしょうか?よろしくお願いします。
48 名前:login:Penguin mailto:sage [2008/06/02(月) 19:03:36 ID:X93+nxzv] >>47 やりたいことがよくわからん。 toku.txt の内容と、 実行後に toku2.txt がどういう内容になってればいいのかを書いてくれ。
49 名前:login:Penguin [2008/06/02(月) 19:28:58 ID:GT1ocSub] >>48 さん 返信ありがとうございます。 toku.txtは住所録です。 それをとりあえず一旦、toku2.txtにbangou.txtと組み合わせたものを 書き出しているだけなのでtoku2.txtには特に何も入っていません。 toku.txtは ▲ 東京都 東京都 東京都 東京都 東京都 ▲ 愛知県 みたいな感じです。(▲は空白です) これをそのままpasteでbangou.txtと結合すると ▲▲ 123123 東京都 123123 東京都 100000 東京都 ▲ 東京都 ▲ 東京都 となってしまうのでこれを ▲▲ 123123 東京都 123123 東京都 100000 東京都 100000 東京都 100000 東京都 というようにしたいんです。空白の行に一番最後の 番号を割り当てたいんです。わかりにくくてすみません。宜しくお願いします。
50 名前:login:Penguin [2008/06/02(月) 19:35:12 ID:GT1ocSub] ごめんなさい。「▲は空白」と書きましたけど実際は改行コードが入っているだけです。 すみません。ごめんなさい。
51 名前:login:Penguin mailto:sage [2008/06/02(月) 19:44:36 ID:X93+nxzv] いまいちよくわからんな。 >>47 の > この場合、1行目と3行目を比較して3行目に数値が入っている場合のみ2行目の値を別表に表示する っていう話もどうなったのやら。 シェルスクリプトでがんばるより perl あたりで書いちゃった方が早そう。
52 名前:login:Penguin [2008/06/02(月) 19:54:09 ID:GT1ocSub] >>47 の書き方が悪かったかもしれないです。ごめんなさい。 実際には>>49 のような処理をしたいんです。 perlでもいいです。一旦処理できればいいんで。お願いします。
53 名前:login:Penguin mailto:sage [2008/06/02(月) 20:01:01 ID:6RTLtbwy] pasteコマンドで結合して処理すればいいんじゃないの?
54 名前:login:Penguin [2008/06/02(月) 20:07:59 ID:GT1ocSub] >>53 さん ご指導ありがとうございます。pasteで結合しただけだと bangou.txtで空白の部分があるので >>49 のように ▲▲ 123123 東京都 123123 東京都 100000 東京都 ▲ 東京都 ▲ 東京都 となってしまうので困ってます。 これを 123123 東京都 123123 東京都 100000 東京都 100000 東京都←空白が上の行と同じ番号 100000 東京都←空白が上の行と同じ番号 という風にしたいんです。お願いします。
55 名前:login:Penguin mailto:sage [2008/06/02(月) 20:09:26 ID:6RTLtbwy] 100000 でいいならsedで置換するだけじゃん。
56 名前:login:Penguin [2008/06/02(月) 20:11:48 ID:GT1ocSub] >>55 さん お返事ありがとうございます。 数値は「10000」ではないんです。 上にある行の数値が欲しいんです。 わかりにくい説明ですみません。 宜しくお願いします。
57 名前:login:Penguin mailto:sage [2008/06/02(月) 21:14:50 ID:W+U/n8+A] paste bangou.txt toku.txt | awk '{printf( "%s %s\n", (NF>1)? $1: onaji, $NF ); onaji=$1}' とかかな? でも、番号の1行目が空白のときはどうするのだろう。
58 名前:login:Penguin [2008/06/03(火) 00:37:37 ID:xzQHL5F2] >>57 さん ありがとうございます! 明日早速試してみます。ありがとうございます。
59 名前:login:Penguin mailto:sage [2008/06/03(火) 16:14:01 ID:CIWG+PQ4] あのスレ住人(特にdebユーザ)に、お願いなんだが、テンブレにあるし絶対ダメだとかいわんけど 書き込むとき、せめてシェルスクリプトと他のperlなんかのスクリプト言語は 意識して区別してくれまいか?ここ、「シェルスクリプトスレ」だから。 (上で「特にdebユーザ」と言ったのは、批判じゃなくて、前スレで発覚したんだが debはディストリレベルでコマンドとperlスクリプトなんかが混在になってるらしく ユーザ自身が区別しない慣習のようだから。でも、それって一般的じゃないし混乱のもとだよね?) sedでもawkでもperlでもいいけど(ここら辺までは普通にシェルで使うだろけど、 perlで複雑なことやりこんだり)なんでもありありなら、わたしゃpythonやzenityや 織り込んでGUIやgtkベースの話はじめちゃうぞw
60 名前:login:Penguin mailto:sage [2008/06/03(火) 16:16:16 ID:8f1erIVq] 「テンブレ」? 「ディストリレベルで混在」? どういう意味?
61 名前:login:Penguin mailto:sage [2008/06/03(火) 16:43:03 ID:CIWG+PQ4] >>60 テンプレつーのは、つーか、>1に >perlやらPythonやらの話が混ざっても良いんでない? とあるし、>2-4にスクリプト言語のリンクも張ってある。 混在つーのは、具体例では、debではrenameコマンドがperlスクリプトprenameに置き換えてあるし どうやらシェル上のパスの通し方なんぞが、perlなどを使いやすいように拡張されてるようだ。 ま、debユーザじゃないので詳しいところまではわからないけどね。 一応断っておくけどdeb批判じゃないよ。
62 名前:login:Penguin mailto:sage [2008/06/03(火) 16:56:54 ID:8f1erIVq] 「テンプレ」を「テンブレ」と書いていたことには気付いているのだろうか。 >>61 > 混在つーのは、具体例では、debではrenameコマンドがperlスクリプトprenameに置き換えてあるし これは特殊かつ些細な例でしょ。 他に何かある? > どうやらシェル上のパスの通し方なんぞが、perlなどを使いやすいように拡張されてるようだ。 そんな事実はないよ。
63 名前:login:Penguin mailto:sage [2008/06/03(火) 17:08:25 ID:CIWG+PQ4] うわぁ、やっぱりdeb信者は・・・ごめんなさいね。趣旨だけ理解してちょ。
64 名前:login:Penguin mailto:sage [2008/06/03(火) 17:10:02 ID:GEyZQq+8] これだけで信者扱いする君もそうとうなものだと思うぞ。
65 名前:login:Penguin mailto:sage [2008/06/03(火) 17:11:57 ID:CIWG+PQ4] はいはい、ごめんなさい、ごめんなさい。あんたが大将。
66 名前:login:Penguin mailto:sage [2008/06/03(火) 17:23:16 ID:8f1erIVq] 信者って決めつけられてもな。 Debian も使ってるし他のディストリも使ってるし。 よく知りもしないのにいいかげんなこと言うな、ってだけ。
67 名前:login:Penguin mailto:sage [2008/06/03(火) 17:46:57 ID:L2QLzXUM] ちんこ
68 名前:login:Penguin mailto:sage [2008/06/03(火) 20:26:13 ID:UQvQZC/E] >>59 分界点が判らない。
69 名前:login:Penguin mailto:sage [2008/06/03(火) 20:51:52 ID:+2Z+EheD] >>68 分界線という言葉ならあるが
70 名前:login:Penguin mailto:sage [2008/06/03(火) 22:24:45 ID:4bIEot6Q] Debianではっつうか、そいつの問題だろう。 シェルスクリプトかperlスクリプトか見てわからないような奴は他の鳥使ったってわかるようにならない。
71 名前:login:Penguin mailto:sage [2008/06/03(火) 22:25:09 ID:meWc8EbG] >>59 > debはディストリレベルでコマンドとperlスクリプトなんかが混在になってる デブな人だけどなんのこっちゃ? まさかPerlスクリプトなら*.plになるとか言ってるわけじゃないよな?
72 名前:login:Penguin mailto:sage [2008/06/03(火) 22:31:11 ID:/nacTMrw] というか、俺も言ってる意味が分からない とくにディストリレベルっていう言葉 ディストリレベルってのはどのレベル?
73 名前:login:Penguin mailto:sage [2008/06/03(火) 22:41:59 ID:8iXvkF35] #/bin/sh perl -e printf( "hello world\n" ); だと、>>59 基準でOKか否かが分かんない。
74 名前:login:Penguin mailto:sage [2008/06/03(火) 22:48:40 ID:513yN16/] 例えばls って打つと ls.pl が起動されるって事だと読み取った。 Debian系は使っていないので真実は知らない。
75 名前:login:Penguin mailto:sage [2008/06/03(火) 22:49:50 ID:OcnJ3se+] #!/bin/sh perl sh.pl ruby sh.rb php sh.php system("hoge.sh",$ret); exec("hoge.sh",$ret); exec("sed 's/B/A/g' $current > $tmp",$ret); exec("rm $current",$ret); system("mv $tmp $current",$ret); もう人生バラ色です
76 名前:login:Penguin mailto:sage [2008/06/03(火) 23:39:04 ID:/nacTMrw] 俺の人生はルビー色
77 名前:login:Penguin mailto:sage [2008/06/03(火) 23:48:22 ID:J2hvNDuq] 質問です。 $ ls "a" file1 file2 $ echo ls \"a\" ls "a" $ `echo ls \"a\"` ls: cannot access "p": No such file or directory 三つめでエラーになるのはなんででしょう? こういう時はどう書くのが正しいのですか?
78 名前:login:Penguin mailto:sage [2008/06/03(火) 23:52:30 ID:4a1SGQ4Q] $ ls "a" ls: a: No such file or directory $ echo ls \"a\" ls "a" $ `echo ls \"a\"` ls: "a": No such file or directory $
79 名前:login:Penguin mailto:sage [2008/06/03(火) 23:53:03 ID:wxT19Ovz] eval `echo ls \"a\"`
80 名前:77 mailto:sage [2008/06/03(火) 23:55:16 ID:J2hvNDuq] >>79 おお!早速ありがとうございました。
81 名前:login:Penguin mailto:sage [2008/06/04(水) 10:36:15 ID:bCIXok9Z] bashの/dev/nullについて質問します。 lsの表示結果でエラー出力だけは表示させずに 標準出力のみtest.txtファイルに出力したいのですが 自分の理解では以下に書いた2になりますが、表示結果 では1でないと通りません。どのようにイメージしたら宜しいのでしょうか? 1: ls /home/ > /dev/null 2>&1 > test.txt 2: ls /home/ > test.txt > /dev/null 2>&1
82 名前:login:Penguin mailto:sage [2008/06/04(水) 10:42:14 ID:jifIrR2s] >>81 「bash のリダイレクトについて」だろ。 /dev/null は bash の問題ではない。 ls /home/ >/dev/null 2>test.txt で OK。
83 名前:login:Penguin mailto:sage [2008/06/04(水) 11:04:40 ID:bCIXok9Z] >>82 すいません、リダイレクトについてでした。回答有難うございます。 ls /home/ >/dev/null 2>test.txtについての流れで確認を して頂きたいのですが宜しくお願い致します。 上記の標準出力1の状態について、lsの結果が/dev/nullに行く。 (ここでデータは破棄されてしまうという考えなのですが) そして、エラー出力2はtest.txtになってますよね? 1の状態 /dev/null 2の状態 test.txt
84 名前:login:Penguin mailto:sage [2008/06/04(水) 11:52:58 ID:3E+PCnl7] >>81 > 1: ls /home/ > /dev/null 2>&1 > test.txt 1) /dev/null を標準出力の出力先に指定 2) 標準出力の出力先をエラー出力の出力先に指定 3) test.txt を標準出力の出力先に指定 結果 標準出力: test.txt エラー出力: /dev/null > 2: ls /home/ > test.txt > /dev/null 2>&1 1) test.txt を標準出力の出力先に指定 2) /dev/null を標準出力の出力先に指定 3) 標準出力の出力先をエラー出力の出力先に指定 結果 標準出力: /dev/null エラー出力: /dev/null
85 名前:login:Penguin mailto:sage [2008/06/04(水) 11:59:59 ID:jifIrR2s] >>81 1: でほんとにうまく行ってる?
86 名前:login:Penguin mailto:sage [2008/06/04(水) 16:29:28 ID:bCIXok9Z] >>84 リダイレクトは出力先を決めるだけなのですか。 解説して頂いた通りで色々パターンを考えてみましたら 出来るようになりました、有難うございます >>85 一応処理結果では正常な雰囲気なのですが、>>81 ですと 理解しずらいので、変えようか考えています。 レス遅れましたが皆さんありがとうございました
87 名前:login:Penguin mailto:sage [2008/06/04(水) 22:17:21 ID:T1bDhlj1] >>86 シェルどころか日本語まで・・・
88 名前:login:Penguin mailto:sage [2008/06/05(木) 00:21:00 ID:lO8RLUCT] 与えられたパスを絶対パスに正規化したいのですがどうすればよいですか? 単に相対->絶対の変換をするだけじゃなくて .とか..も適切に変換してくれるとうれしいのですが。
89 名前:login:Penguin mailto:sage [2008/06/05(木) 00:23:58 ID:qyhUQGl8] >>88 `pwd`/$1
90 名前:login:Penguin mailto:sage [2008/06/05(木) 00:32:17 ID:brEG0pS6] realpathだっけ?
91 名前:login:Penguin mailto:sage [2008/06/05(木) 06:27:50 ID:Ysl4yLMq] ここはLinux板だからreadlink -fでどうか
92 名前:login:Penguin mailto:sage [2008/06/07(土) 17:03:59 ID:lYfLA/cT] スレ違いのような気もしますが・・・ lsの出力が端末だとスペース区切りなのにパイプやリダイレクトすると改行になるのはどういう仕組みですか?
93 名前:login:Penguin mailto:sage [2008/06/07(土) 17:10:19 ID:6DqLCPKX] isatty(3)
94 名前:92 mailto:sage [2008/06/07(土) 17:13:39 ID:lYfLA/cT] なるほど、lsのほうで端末かどうかみてるんですね… 納得しました。どうもありがとうございます。
95 名前:login:Penguin mailto:sage [2008/06/08(日) 00:25:14 ID:z0g0MNBT] スレ違いだと思うならくだ質に行きなさい。
96 名前:login:Penguin mailto:sage [2008/06/08(日) 14:37:28 ID:w3H8z2Sk] シェルスクリプト中で、リダイレクトでファイルを生成するとファイル名が文字化けしてしまうのですが 一体何が悪いんでしょうか。 ↓みたいなことになります。 $ echo $LANG ja_JP.UTF-8 $ cat test.sh echo a > "$1" $ echo hoge > "あいうえお.hoge" ; ls test.sh あいうえお.hoge $ sh test.sh "あいうえお.hoga” ; ls ??????????.hoga test.sh あいうえお.hoge touchとかなら文字化けしないようなのですが。
97 名前:96 mailto:sage [2008/06/08(日) 14:54:23 ID:w3H8z2Sk] 補足です。 $ ls | hexdump -C 00000000 e3 82 e3 84 e3 86 e3 88 e3 8a 2e 68 6f 67 61 0a |...........hoga.| 00000010 74 65 73 74 2e 73 68 0a e3 81 82 e3 81 84 e3 81 |test.sh.........| 00000020 86 e3 81 88 e3 81 8a 2e 68 6f 67 65 0a |........hoge.| 0000002d
98 名前:login:Penguin mailto:sage [2008/06/08(日) 21:58:48 ID:cpZuCikO] ls --show-control-chars
99 名前:login:Penguin mailto:sage [2008/06/09(月) 19:55:01 ID:Dt/jCYdy] jp.youtube.com/watch?v=x7pPajOvQGo ワロタ
100 名前:login:Penguin mailto:sage [2008/06/09(月) 20:44:39 ID:19yx0Oqh] 注文スクリプトを作りました、ってこと?
101 名前:login:Penguin mailto:sage [2008/06/09(月) 20:52:39 ID:1XPLtUDQ] 日本でもオンライン注文のピザ屋があれば出来そうね。 映画ジュラシックパークの中でプログラマーがデブでピザ食べていたけど、 この動画もその皮肉?
102 名前:login:Penguin mailto:sage [2008/06/09(月) 20:56:56 ID:zrUasBao] シェルスクリプトじゃないけど。 e8y.net/blog/2006/07/25/p126.html
103 名前:login:Penguin mailto:sage [2008/06/09(月) 21:02:45 ID:zrUasBao] >>101 hacker の食べ物といえば ピザと Jolt Cola と相場が決まっておる。
104 名前:login:Penguin mailto:sage [2008/06/10(火) 00:00:50 ID:Uz5XyeDf] なんだPizza Partyか slashdot.jp/article.pl?sid=04/05/08/0858242
105 名前:login:Penguin [2008/06/10(火) 13:27:23 ID:Gys5ZtGT] 2037→1048→2481207→↓ 2037→1048→2481207→↓ 20311→1056→2481211→↓ 20320→1114→2481218→↓ 20320→1114→2481218→↓ 20326→1155→2481211→↓ 20326→1155→2481211→↓ → →2481211→ → →2481211→↓ tomo.txtの中身はこうなっています。(→はタブ、↓は改行コードです) これで2列目に何も文字列が入っていない場合は3列目も何も文字列を 入れないようにしたいです。(上のtxtの場合だと下の2行が対象になります) sedとcutでなんとかなるかと思ったんですけどなかなかうまくいきません。 誰かいいスクリプトを教えて下さい。宜しくお願いします。
106 名前:login:Penguin mailto:sage [2008/06/10(火) 14:03:41 ID:rnP/TIGa] これでどう? awk '{if (length($2) != 0) print;}' tomo.txt
107 名前:105 [2008/06/10(火) 15:27:43 ID:Gys5ZtGT] 早速のレスありがとうございます。でもうまく動かないです。。。 試しにlengthの値を変えてみたりしたんですが何も変化がないです。。
108 名前:login:Penguin mailto:sage [2008/06/10(火) 16:24:40 ID:mINSOvv3] >107 もっと具体的に目的を書かないとどういう結果が欲しいのか解らんよ。 >105の下から2行目は改行が入ってないの? それとなにも列に入っていないと言いつつ全角スペースが入っているのは何故? まあ、やりたいことを推測して例を出せばこんな感じか? cat tomo.txt | while read LINE;do set -- $LINE; if [ $# = 3 ]; then echo "$LINE"; fi; done
109 名前:105 [2008/06/10(火) 19:02:47 ID:CM93IypP] >>108 さん ご回答ありがとうございます。 すみません。 >105の下から2行目は改行が入ってないの? 入ってます。 >それとなにも列に入っていないと言いつつ全角スペースが入っているのは何故? 実際には入っていません。 ですから正確にはtomo.txtはこうなってます。 2037→1048→2481207→↓ 2037→1048→2481207→↓ 20311→1056→2481211→↓ 20320→1114→2481218→↓ 20320→1114→2481218→↓ 20326→1155→2481211→↓ 20326→1155→2481211→↓ →→2481211→↓ →→2481211→↓
110 名前:105 [2008/06/10(火) 19:05:04 ID:CM93IypP] それを以下の下2行の2列目に文字列がない場合は 削除したいので以下のような結果を出して欲しいんです。 2037→1048→2481207→↓ 2037→1048→2481207→↓ 20311→1056→2481211→↓ 20320→1114→2481218→↓ 20320→1114→2481218→↓ 20326→1155→2481211→↓ 20326→1155→2481211→↓ →→→↓ →→→↓ 何度もすみません。よろしくお願いします。
111 名前:105 [2008/06/10(火) 19:19:42 ID:CM93IypP] cat tomo.txt | while read LINE;do set -- $LINE; if [ $# = 3 ]; then echo "$LINE"; fi; done を試してみましたけどやはり何も変化はありませんでした。 すみません。お願いします。
112 名前:login:Penguin mailto:sage [2008/06/10(火) 19:35:16 ID:gcco3DVH] よくわからんけど、タブが2回続いたらタブ3個だけの行に置き換えるとかじゃだめなの? やり方は知りません
113 名前:login:Penguin mailto:sage [2008/06/10(火) 21:34:41 ID:39ga6S1g] これはどうだ? awk -F '¥t' '{if ($2 == "") { $3 = ""}; print}' < tomo.txt awkのデフォの列識別はタブじゃないから-Fで指定してね。
114 名前:105 [2008/06/11(水) 03:27:04 ID:bnnOzDXT] >>113 ありがとうございます。今日はこんな時間なので明日試してみます。 '\t'の部分がうまく識別してくれたらいけそうな感じがします。
115 名前:105 [2008/06/11(水) 05:10:34 ID:bnnOzDXT] おはようございます。 今試してみたらうまく動きました。ありがとうございました。
116 名前:login:Penguin mailto:sage [2008/06/11(水) 05:47:46 ID:wK/2Md+f] >>114 >>115 明日ってw
117 名前:105 [2008/06/11(水) 08:14:21 ID:sVHDZWwZ] あっーーー!よくみたら 2037→1048→2481207→↓ 2037→1048→2481207→↓ 20311→1056→2481211→↓ 20320→1114→2481218→↓ 20320→1114→2481218→↓ 20326→1155→2481211→↓ 20326→1155→2481211→↓ ↓ ↓ って感じで最後の2行のタブが全部消えてました。。。 これは消えると困るんです。再度お願いします。。。
118 名前:login:Penguin mailto:sage [2008/06/11(水) 08:47:58 ID:uz75y6lZ] 難問が…
119 名前:login:Penguin mailto:sage [2008/06/11(水) 10:00:16 ID:NnMk6hEw] >112でいけるだろ sed -e 's/\t\t[^\t][^\t]*/\t\t/' tomo.txt \tが使えなかったらタブで置きかえる。
120 名前:login:Penguin mailto:sage [2008/06/11(水) 10:14:39 ID:tvbxZjG7] >>117 あり? $2 = ""をしない行はちゃんとタブで分けたまま出力してるのに 置き換えをした行はスペースが出力区切り文字になっちゃうな。 じゃ、無理矢理修正 awk -F '¥t' -v OFS='¥t' '{if ($2 == "") { $3 = ""}; print}' < tomo.txt OFS はoutput field separator
121 名前:105 [2008/06/11(水) 11:52:44 ID:sVHDZWwZ] ありがとうございます! 今度こそ大丈夫です!本当にありがとうございます!
122 名前:login:Penguin mailto:sage [2008/06/11(水) 22:25:09 ID:8Wsl19+C] Open Foundation Software じゃないのか。
123 名前:login:Penguin mailto:sage [2008/06/12(木) 00:10:41 ID:JqmZrOtu] >>122 OSFですがw Open Software Foundation
124 名前:login:Penguin mailto:sage [2008/06/12(木) 11:24:21 ID:irJT+vdW] 誰かピザハット対応ピザ注文コマンド作ってくれないものか。
125 名前:login:Penguin mailto:sage [2008/06/12(木) 11:52:43 ID:3DTOjPry] >>124 出前館にあるみたいだから、>>102 をいじれば作れるんじゃない?
126 名前:login:Penguin [2008/06/12(木) 12:44:22 ID:Y4yiWWC/] #xxx.txtの1行目を変数iに代入します for i in `cat xxx.txt` do #xxx.txtの2行目を$jに入れます j=`sed -n '2p' export j #変数eeeにxxx.txtの2行目から15行目を代入します eee=`sed -n '2-15p' export eee #pasteで結合できるように変数をtxtファイルに入れます echo $i > i.txt echo \t > ccc.txt echo $eee > eee.txt if #xxx.txtの行の先頭が20から始まる場合 then test $j = "^20" #結合します paste i.txt ccc.txt eee.txt else #何もしない fi done 初心者です。こんなスクリプトを作ったんですけどうまく動きません。 修正していただけるとありがたいです。お願いします。
127 名前:126 [2008/06/12(木) 12:55:44 ID:Y4yiWWC/] #xxx.txtの1行目を変数iに代入します for i in `cat xxx.txt` do #xxx.txtの2列目を$jに入れます j=`sed -n '2p' export j #pasteで結合できるように変数をtxtファイルに入れます echo $i > i.txt echo \t > ccc.txt if #xxx.txtの行の先頭が20から始まる場合 then test $j = "^20" #結合します paste i.txt ccc.txt eee.txt else #何もしない fi done 間違えました。eee.txtは別途作りますので上記のような感じです。
128 名前:login:Penguin [2008/06/12(木) 14:03:25 ID:Y4yiWWC/] 意味不明ですみません。会社から回りの人の目を盗みながら こそこそと2ちゃんねるやってるんで・・・ これでお願いします。 #変数aaaにxxx.txtの1行目を代入します for aaa in `cat xxx.txt` do #変数bbbにxxx.txtの2行目を代入します bbb=`sed -n '2p' export=bbb #変数cccに$iの1列目を代入します ccc=`cat $i | cut -f1` export=ccc #変数dddに$iの2から14列目を代入します ddd=`cat $i | cut -f2-14` exprot=ddd if #xxx.txtの2行目の先頭行が20の場合は切り出したファイルを結合します then test $aaa = "^20" paste ccc.txt tab.txt ddd.txt elsei #それ以外の場合はその列をそのままファイルに書き出します echo aaa.txt fi done
129 名前:login:Penguin mailto:sage [2008/06/12(木) 18:57:20 ID:RuYhMH5C] >>126 日本語でおk 人に説明するためにやりたいことを整理すると自然に解決したりするものよ。
130 名前:login:Penguin mailto:sage [2008/06/12(木) 19:11:00 ID:3DTOjPry] 最初に for を持ち出したところからすでに意図がわからん。
131 名前:login:Penguin mailto:sage [2008/06/12(木) 19:16:11 ID:kPFkNEQb] perlでやればいいと思うよ
132 名前:126 [2008/06/12(木) 19:28:24 ID:TxRWHMwb] >>129 ありがとうございます。でもなかなかうまくいかないんです。 >>130 すみません。for文の処理がうまくいかないんで抜粋しました。 >>131 perlは全然わかんないんでなんとかシェルでやりたいです。
133 名前:login:Penguin mailto:sage [2008/06/12(木) 20:00:58 ID:48VJya+Z] 任意の時間を入力し、それをUTC時間に変換することは可能でしょうか? dateコマンドだとカレントタイムを変換してしまうので。。
134 名前:login:Penguin mailto:sage [2008/06/12(木) 20:55:58 ID:JwqUhAVV] date -u じゃダメなのかな
135 名前:login:Penguin mailto:sage [2008/06/12(木) 21:14:33 ID:lC+5xa2L] それに -d オプションを付けたいんじゃないのかな。 $ date -u -d '2001/5/20 13:33:35 JST'
136 名前:login:Penguin mailto:sage [2008/06/12(木) 21:41:49 ID:JqmZrOtu] >>133 awkにあるmktime, strftime関数を使うのが一番手軽かな。
137 名前:133 mailto:sage [2008/06/12(木) 23:39:42 ID:mOwz8//t] >>134-136 実現できました! 即レス助かりました。ありがとうございます。
138 名前:login:Penguin mailto:sage [2008/06/13(金) 08:03:49 ID:TrNV+QBw] >>126 は解決したのだろうか。 俺には意図が解らなかったが。
139 名前:126 [2008/06/13(金) 09:47:03 ID:j8pwVaea] >>138 心配していただきありがとうございます。まだ未解決です。 簡単にいうと aaa.txtが [100] 201 202 203 [200] 301 302 303 となっている場合に [100] 201 [100] 202 [100] 203 [200] 301 [200] 302 [200] 303 としたいんです。(スペースのところはタブ区切りを入れたいです) お願いします。
140 名前:login:Penguin mailto:sage [2008/06/13(金) 10:12:43 ID:+c/4qhZ/] #!/usr/bin/perl my $i = ''; while (<>) { chomp; if ($_ eq '') { $i = ''; print "\n"; } elsif ($i eq '') { $i = $_; } else { print "$i\t$_\n"; } }
141 名前:126 [2008/06/13(金) 10:25:54 ID:j8pwVaea] >>140 それを今試してみたら [100] [100] 201 [100] 202 [100] 203 [100] [100] 301 [100] 302 [100] 303 みたいになっちゃいました。 せっかくコードを書いていただいたのですがちょっと 結果が違いました。すみません。
142 名前:login:Penguin mailto:sage [2008/06/13(金) 10:28:27 ID:5MIbjJC0] > 126 awk 'BEGIN {OFS = "\t";}; $0 != "" {if ($0 ~ /^\[/) section = $1; else print section, $1}' aaa.txt 多分もっと格好よくできるはずなんだけどなぁ
143 名前:login:Penguin mailto:sage [2008/06/13(金) 10:38:47 ID:obeusV/U] >>139 gawk '{if(match($0,/^\[[0-9][0-9]*\]$/))t=$0;else{if(length)$0=t "\t" $0;print;}}' aaa.txt sed -e '/^\[[0-9][0-9]*\]$/{h;d}/^..*/{x;G;s/\n/\t/;p;s/\t.*//;h;d}' aaa.txt まだ短くならないかな。
144 名前:login:Penguin mailto:sage [2008/06/13(金) 10:43:39 ID:+c/4qhZ/] >>141 203 の次の行は空行じゃないの?
145 名前:login:Penguin mailto:sage [2008/06/13(金) 10:45:41 ID:+c/4qhZ/] >>126 > #変数eeeにxxx.txtの2行目から15行目を代入します > #xxx.txtの行の先頭が20から始まる場合 最初と言ってることぜんぜん違うじゃねーか。
146 名前:126 [2008/06/13(金) 11:04:27 ID:j8pwVaea] >>142 おおおっ。すごいです。ありがとうございます。 で、あまりにも簡単に説明しすぎたせいで少し動作が違いました。 実際にはaaa.txtは複数の列でできています。 [100] 201 100 200 202 100 200 203 100 200 "" [200] 301 100 300 302 100 300 303 100 300 "" あと先頭が数字では始まらないけど文字列が入っている場合もあります。 その列は何も処理をしたくないんです。もちろん空白の列にも何も処理をしたくないです。 説明が不足していてすみません。お願いします。
147 名前:login:Penguin mailto:sage [2008/06/13(金) 11:08:06 ID:+c/4qhZ/] どんどん条件変わるな。 もう付き合いきれん。