- 締切済み
テキストファイル内の(から)の取り出し
テキストファイルの中の”(”から”)”までの中身をとりだしたい のですが言い方法が思いつきません。どのようにすればいいでしょうか? OSはSolarisまたはLinuxです。 ”(”の中は”(”が何重かネストしています。 手段は特に問わないのですが、今後のメンテを考慮すると awkかperlのスクリプトで実現できればありがたいでです。 イメージとしては ファイルAの中 文字列1( (・・) (・・) ) 文字列2( (・・) (・・) ) をA.文字列1、A.文字列2で出力できればと思います。
- Kasaoka-Taroh
- お礼率34% (79/229)
- その他(プログラミング・開発)
- 回答数3
- ありがとう数0
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- notnot
- ベストアンサー率47% (4845/10256)
No2です。 >どの部分が矛盾しているとおっしゃっているのでしょうか? なんと。書き間違いではないと? >テキストファイルの中の”(”から”)”までの中身をとりだしたい であれば、 文字列1( (・・) (・・) ) 文字列2( (・・) (・・) ) を入力とすれば、出力は ・・ ・・ ・・ ・・ です。 出力として欲しいものが、 A.文字列1 A.文字列2 であるなら、 ファイル名を前置して、テキストファイルの中の”(”から”)”までを削除したい または ファイル名を前置して、テキストファイルの中の”(”から”)”の外側をとりだしたい です。
- notnot
- ベストアンサー率47% (4845/10256)
前半の文章と後半の例が矛盾してますが、どちらが正しいのですか? どちらかが、書き間違いですね。正しい内容を補足してください。
補足
すいません。何かがうまく伝わっていないのだろうと思うのですが、どの部分が矛盾しているとおっしゃっているのでしょうか?申し訳ありませんが、具体的に教えていただけますか?
- ORUKA1951
- ベストアンサー率45% (5062/11036)
もう少し具体的なテキスト見本が必要です。 例文) テキストファイルの(中の(から)までの中身をとりだしたいのですが)言い方法が(思いつきません。)どのように(すればいいでしょうか?(OSは(Solaris)または(Linux))です。 結果) ( 中の ( から ) までの中身をとりだしたいのですが ) ( 言い方法が(思いつきません。 ) ( すればいいでしょうか? ( OSは ( Solaris ) または ( Linux ) ) です。 外側の()内にある()に含まれない文字はどうするのか?? 通常は、(が現れるたびにカウントを加算し、)が現れるたびに減算し、ゼロになった時点で配列なりハッシュを閉じるという形で進めていきます。 XMLやHTMLの解析と同じ手順を進めればよいです。その場合は(ではなく<document></document>の組で計算しますから、より複雑ですが・・
補足
具体的なイメージで言うと ファイルFの中が texta( aaa( Aaaa() ) bbb( Abbb() ) ) textb( ccc( Bccc() ) ddd( Bddd() ) ) ↓ の場合 F.textaが texta( aaa( Aaaa() ) bbb( Abbb() ) ) F.textbが textb( ccc( Bccc() ) ddd( Bddd() ) となってくれればありがたいということです。 無理でしょうか?
関連するQ&A
- ファイル操作について、テキストファイルの書き換え
よろしくお願いします。 データファイルAからデータを取得して、テキストファイルBの内容の一部を取得したデータで書き換えるという操作を行うプログラムを作りたいです。 具体的には、 データファイルA[A.txt]の中身 111 222 333 444 テキストファイルB[B.txt] 文字列1="123" 文字列2="234" 文字列3="345" 文字列4="456" というような二つのファイルを読み込み、B.txtの""で囲まれた部分を、A.txtで取得したデータで置き換えるような操作を行いたいのですが・・。 使用する言語としてはスクリプト言語であるperl、もしくはプログラム作成経験があるCを使用しようと思っています。(perlは未経験で入門書を読んでいるレベル)
- ベストアンサー
- Perl
- 【継続質問】シェルスクリプトを用いて、ある特定の文字列の前に文字列を挿入
シェルスクリプトを用いて、ある特定の文字列の前に文字列を挿入 の継続質問です。よろしくお願いします。 tacとawkを用いて、"ある特定の文字列の前に文字列を挿入"ということができるのは、 確認することができました。 例えば、 script.awk (awkスクリプト) sample.txt (処理対象ファイル) という環境で、 $ cat script.awk $ tac sample.txt | awk -f script.awk | tac > sample2.txt とコマンドを入力した場合、 sample2.txtに、処理が完了したテキストが作成され、 中身も問題ないことを確認できました。 しかし以下のようなことを実現しようと思うと、 うまく行きませんでした・ 「非対話的に上記の処理を行いたいのです」 上記の方法では、 catとtacと2回コマンドを叩く必要があります (1回にもできるのでしょうが…) できれば、自動的に流れる膨大なシェルスクリプトの処理の中で、 上記の処理を自動的に行うということを実現したいのです。 例えば、auto.shというシェルを実行すれば、 勝手にawkスクリプトを読み込み、勝手に変換したものを出力してくれる… そのようなシェルを作成したいと考えています。 そこで色々試しましたが上手くいきません。 1.コマンドの分解ができない tac sample.txt | awk -f script.awk | tac > sample2.txt の上記を、 #!/bin/sh tac sample.txt awk -f script.awk tac > sample2.txt のようにシェルスクリプトに記述しなおして実行しましたが、 上手くいきませんでした。 2.script.awk(awkスクリプト)を内部に取り込み 外部ファイルとして存在している、script.awkをなんとか シェルに組み込もうと思って、 awk {(script.awkの内容をそのまま記述)} のように行いましたが、文法的にやはり無茶苦茶でした・・・。 正直、2番が無理であれば仕方ありませんが、 最低でも1は実現したいと思います。 1の方法だけでも良いので、どなたか回答をお願いします。
- ベストアンサー
- Linux系OS
- テキストファイルの行抽出
linux環境のプログラムについて質問です。 ある特定のファイル(テキストファイル)内のデータで 指定の行を抽出する方法を教えていただきたいと思います。 現在はawkを使用してbashスクリプト内で下記のように head, tailを使用していますが、処理が重いように 感じます。perlまたはawkなどで行抽出の軽い処理は できないでしょうか? (他のunixコマンドでも結構です。) ---------------------------------------- RNUM=`awk 'END{print NR}' $1` #行番号取得 for iwl in `seq 1 $RNUM`;do BASE=`head -n $iwl $1 | tail -n 1` done #iwl ---------------------------------------- Fortran, Cなども使えますが、色々組み合わせて使う上で bash内のスクリプトで行ないたいと思います。
- ベストアンサー
- その他(プログラミング・開発)
- SolarisからLinuxへコピーしたスクリプトについて
Solaris上で動作しているPerlスクリプトがあるのですが、 Linux上で動作させることができないので、困っています。 原因を特定するため、Solarisからコピーしたファイルの 中身を、下記コードに入れ替えた場合と、新規にLinux 上で作成した場合を比べてみると、表示結果が異なります。 solarisからコピーしたファイルを表示すると、 「500 サーバ内エラー サーバー内で、実行中のプログラムが異常終了しました。」 と表示されます。 新規にLinux上で作成したファイルを表示すると、 問題なく表示されます。 これくらいしか分からないのですが、何かアドバイスを いただけないでしょうか? # file test.pl <-Solarisからコピーしたファイルを編集 script text executablerl # file test2.pl <-Linux上で新規作成 test.pl: a /usr/bin/perl script text executable ・コード #!/usr/bin/perl print "Content-type: text/plain\n"; print "\n"; print "Hello!World"; exit(0);
- ベストアンサー
- Linux系OS
- ファイル処理について
宜しくお願いします。 ファイル「ppp.txt」の中の文字列を逆にする コードを組みたいのですが、どの本を読んでも ロジックが見当たりません。 ファイルppp.txtの中は以下です。 AAA BBB CCC DDD EEE -> EEE DDD CCC BBB AAA としたいのです。 じっくり探せばあると思うのですが、 急ぎなので投稿しました。 これを実現するPerlスクリプトコードを 教えて頂けないでしょうか。 宜しくお願いいたします。
- ベストアンサー
- Perl
- 二つのファイルから条件に一致する行を抽出
AとBの二つのファイルがあります。 Aの2列目3列目の間に存在するBの2列目のファイルを抽出してCのファイルを作成したいです。 awkのifでチマチマ作ればできるとは思うのですが、他に簡単にできる方法はないでしょうか? awkだけでなくperlやpythonなどでも問題ないです。 <A> A 10 20 B 30 40 C 50 70 D 90 110 <B> あ 15 い 25 う 55 え 75 お 95 <C> あ 15 う 55 お 95
- ベストアンサー
- Python
- テキスト処理を行うツール
現在Linuxの入門書を読んでいます。 その書籍のコマンドに少し触れているページで、 「高度なテキスト処理を行う」コマンドとしてawkとsedが紹介されています。 (1)このawkとsedの違いについてですが、以下のような考えでよろしいでしょうか? 「概念、シンタックス、コードの書き方などに違いはあるが、 実現できるテキスト処理に大差はない」 或いは、共にテキスト処理を行うコマンドであるが、 ターゲットとしている、或いは得意としている処理内容に違いがあるのでしょうか? awkとsedの両刀使いの方は、どのような基準で使い分けているのでしょうか? (2)「高度なテキスト処理を行う」ツールとして、何か1つ習得したいと思っています。 Webの情報を見ていると、awk/sedの利用者は昔からのUNIX/Linuxユーザーが多く、 最近のユーザーはスクリプト言語(perl, ruby, python, ...)を使っているような印象を 受けました。 今から学ぶ場合、スクリプト言語を学ぶ方が活用シーン(Webアプリ開発など)も広がり、 おすすめでしょうか? ご意見をお聞かせください。 よろしくお願いします。
- ベストアンサー
- Linux系OS
- テキストファイルの操作で教えてください!
テキストファイル操作について教えて下さい。 膨大な数のテキストファイルがあります。 中身は改行などを含む ---------- ・ ・ ・ 1. 文字列 文字列 文字列 2. 文字列 文字列 文字列 。 。 。 ---------- の様な形です。 1つのファイルに1.~100.まであります。 この1.から100.までを全ファイル抜出すか前後の行を削除し、1つのファイルにしたいです。 どうすればできるか教えてください。 お願いします。
- 締切済み
- Windows 7
- テキストファイルの編集
以前にもperlでのプログラミングについて質問させて頂いた者です。 前回と被る所があるのですがちょっと複雑で、私の手に負えないので質問させて頂きます。 よろしくお願いします。 データファイルAからデータを取得して、テキストファイルBの内容の一部を取得したデータで書き換えるという操作を行うプログラムを作りたいです。 具体的には、 データファイルA[A.txt]の中身 100 111 200 222 300 333 400 444 テキストファイルB[B.txt] 1st step 文字列1 start="123" end="134" 2nd step 文字列2 start="234" end="245" 3rd step 文字列3 start="345" end="356" 4th step 文字列4 start="456" end="467" という二つのファイルを読み込み、B.txtの""で囲まれた部分を、A.txtで取得したデータで置き換えるような操作を行いたいのですが・・。 A.txtの一行目で取得したデータをB.txtの1stステップの始まりと終わりの値として置き換え、それを二行目は2ndと同様の操作を行うようなプログラムを作りたいです。 もともとこのような操作を行いたくて前回のような質問をし、それを参考にし今日まで考えましたがやはり難しく、また頼りたいと思います。。 どうかよろしくお願いします。
- ベストアンサー
- Perl
- あるファイルと同じファイル名のファイルをbashで生成
OSはLinuxです。 あるディレクトリAにhoge_i(i=1~100)というファイルがあったとします。 別のディレクトリBに、同名のファイル100個を作りたいのですが、 どのようにすればよいでしょうか。 なお、新ファイルの中身は空でもかまいせん。 タイトルではbashと書きましたが、awkでもかまいません。
- 締切済み
- その他(プログラミング・開発)
補足
なるほどわかりました。確かに私の説明不足ですね。 私が思っているのは"("の中にはいくつか()がネストしているケースがあるので、一番外の()の中をその中の()込みでA.文字列1、A.文字列2の様な形式で出力できればと 考えています。更にその中の()の中を取り出したければもう一度同じプログラムを取り出したものにかければ済むと思うので.. といった感じです。