人に聞けない痔の悩み、これでスッキリ >>

ファイル内に書かれた「20070612.log」の20070612を日付データとしてみなし2007/06/12として置換し取り出したいのですがどのようにすればよいでしょうか??

このQ&Aに関連する最新のQ&A

A 回答 (4件)

質問の仕方がわるい。



>置換し取り出したい

取り出す・・・といわれても何のプログラムでどうデータを使いたいか
書かないとなにをやりたいかあいまいすぎて・・・。

そのファイルには「20070612.log」とだけ書かれているのですか?
それを日付形式で表示すればよいのですか?

この回答への補足

すいません。具体的には各行の所定の位置にある日付けデータが
test_20070521.log:XXXX~
test_20070522.log:XXXX~
     ・
     ・
     ・
の様に書かれています。このデータから日付を取り出し別のファイルに
2007/05/21
2007/05/22の様に出力したいのです。

補足日時:2007/06/18 13:10
    • good
    • 0

すみません。

ちょっとこれまでの操作経緯を確認させてください。ANO.2 補足欄に書かれていました下記コメントですが、

> ...実際にDOSプロンプトからそのまま実行してみたところ...

ここは「Linux カテゴリ」だけに、てっきり "DOSプロンプト" から Linux マシンにリモートログインしてからのお話、...と私は認識していました。ですが、今回頂きました下記補足部には、「D:\」とあります。これは、そのまんま言葉のとおり "DOSプロンプト" つまり、Windows上の話ですか?

> ■コマンドライン
> D:\デスクトップ\10_RLログ解析\rlsp_log\テスト...

Windows には標準で sed は無いと思いますが私の思い違いでしょうか(もし、あったのなら自分自身の無知にちょいショック)。それとも Windows 用に移植された sed grep awk などを導入しているとか、そういったことですか?
まぁ、Windows での話ということであれば「\」がパス区切りで使われるので、「\」をさらに処理する必要がありそうですね。

この回答への補足

Windowsパソコンですが、ServicesForUnixをインストールしてありますので、Unix系のコマンドが使用できます。

補足日時:2007/06/20 09:43
    • good
    • 0

No.2 です。


上手くいきませんか?
手元で確認すると以下の結果を得ましたが...。

■ -*- ファイル「sample」の中身 -*-
XXXXtest_20070521.log:XXXX
XXXXtest_20070522.log:XXXX

shell> sed "s/.*test_\(....\)\(..\)\(..\)\.log.*/\1\/\2\/\3/" < sample
2007/05/21
2007/05/22


ところで、下記エラーが発生したときのコマンドラインを補足(copy&paste)して頂けますか? 失礼ですが「/」と「\」の組合せが一寸気になります。

> sed: 1: "s/.*test_/(..../)/(../)/...": bad flag in substitute command: ')'

この回答への補足

情報が足りなくてすいません。
実際のコマンドラインです。
■vvv1.txtの中身
XXtest_20070507.log,XXXXXXX  XXtest_20070507.log XXXXXX
XXtest_20070508.log,XXXXXXX  XXtest_20070507.log XXXXXX

■コマンドライン
D:\デスクトップ\10_RLログ解析\rlsp_log\テスト>sed "s/.*test_\(....\)\(..\)\(..\)\.log.*/\1\/\2\/\3/" < vvv1.txt
sed: 1: "s/.*test_/(..../)/(../)/...": bad flag in substitute command: ')'

実際の所、このvvv1.txtで1行には2つ以上のXXtest_20070507.log が入っており、これらを2007/05/07の様に置換し、別のファイルに

XXtest_2007/05/07.log,XXXXXXX  XXtest_2007/05/07.log XXXXXX
XXtest_2007/05/08.log,XXXXXXX  XXtest_2007/05/07.log XXXXXX
の様に出力したいと考えています。
よろしくお願い致します。

補足日時:2007/06/19 13:46
    • good
    • 0

補足欄に記されているように、データフォーマットが全体を通して統一されているという前提です。

何通りもやりようはありますが、一つには以下のものがあります。

sed "s/.*test_\(....\)\(..\)\(..\)\.log.*/\1\/\2\/\3/"< 入力ファイル> 出力ファイル

この回答への補足

回答ありがとうございます。実際にDOSプロンプトからそのまま実行してみたところ

sed: 1: "s/.*test_/(..../)/(../)/...": bad flag in substitute command: ')'
というエラーがでてしまいました。
私の方でも調査いたします。
他の方法はないでしょうか?

補足日時:2007/06/18 17:56
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング