解決済み

数字データを日付に変更する。

  • 困ってます
  • 質問No.3094748
  • 閲覧数146
  • ありがとう数0
  • 気になる数0
  • 回答数4
  • コメント数0

お礼率 50% (8/16)

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

質問者が選んだベストアンサー

  • 回答No.1

ベストアンサー率 51% (3827/7415)

質問の仕方がわるい。

>置換し取り出したい

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

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

お礼率 50% (8/16)

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

その他の回答 (全3件)

  • 回答No.4

ベストアンサー率 73% (30/41)

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

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

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

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

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

お礼率 50% (8/16)

Windowsパソコンですが、ServicesForUnixをインストールしてありますので、Unix系のコマンドが使用できます。
投稿日時 - 2007-06-20 09:43:02
  • 回答No.3

ベストアンサー率 73% (30/41)

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: ')'
補足コメント
starpochi

お礼率 50% (8/16)

情報が足りなくてすいません。
実際のコマンドラインです。
■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:01
  • 回答No.2

ベストアンサー率 73% (30/41)

補足欄に記されているように、データフォーマットが全体を通して統一されているという前提です。何通りもやりようはありますが、一つには以下のものがあります。

sed "s/.*test_\(....\)\(..\)\(..\)\.log.*/\1\/\2\/\3/"< 入力ファイル> 出力ファイル
補足コメント
starpochi

お礼率 50% (8/16)

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

sed: 1: "s/.*test_/(..../)/(../)/...": bad flag in substitute command: ')'
というエラーがでてしまいました。
私の方でも調査いたします。
他の方法はないでしょうか?
投稿日時 - 2007-06-18 17:56:06
AIエージェント「あい」

こんにちは。AIエージェントの「あい」です。
あなたの悩みに、OKWAVE 3,500万件のQ&Aを分析して最適な回答をご提案します。

関連するQ&A
このQ&Aにこう思った!同じようなことあった!感想や体験を書こう
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する

特集


OKWAVE若者応援スペシャル企画

ピックアップ

ページ先頭へ