• 締切済み

データの抜き取りとcsv出力

---- Frame 273 (126 bytes on wire, 126 bytes captured) Arrival Time: Dec 12, 2007 14:24:53.169702000 Last SR timestamp: 1840388505 (0x6db21999) Delay since last SR timestamp: 174981 (2669 milliseconds) ---- といった形式のデータの塊が1つのファイルに複数存在しているのですが、 このデータの中のArrival Time:,Last SR timestamp:,Delay since last SR timestamp:の値をそれぞれ抽出して、上記の例だとDec 12, 2007 14:24:53.169702000,1840388505 (0x6db21999),174981 (2669 milliseconds)といったようなcsv形式で1ファイル分のデータを出力させたいのですが、perl初心者なもので、手におえないでいます。 申し訳ありませんが、どなたか教えていただけないでしょうか。 よろしくお願いいたします。

  • Perl
  • 回答数2
  • ありがとう数0

みんなの回答

  • ralf124c
  • ベストアンサー率52% (232/446)
回答No.2

とりあえず「<>が存在しない」「データの最後はかならずDelay」という条件付でならこんな感じ my $FN = 'ファイル名'; my $key1 = 'Arrival Time: '; my $key2 = 'Last SR timestamp: '; my $key3 = 'Delay since last SR timestamp: '; open(IN01,$FN); while(my $line = <IN01>){ ## データがそろうかEOFまで読み込み $line .= <IN01> while(!($line =~ /$key3/) and !eof(IN01)); ## データがそろっていると仮定して処理 if($line =~ /$key3/){ ## 改行置き換え $line =~ s/\r\n|\r|\n/<>/g;; my $arrive = $line; my $last = $line; my $delay = $line; ## キーワードから必要部分を抽出 $arrive =~ s/.*$key1([^<]+).*/$1/; $last =~ s/.*$key2([^<]+).*/$1/; $delay =~ s/.*$key3([^<]+).*/$1/; ## 表示部分 my $DT = sprintf("%s,%s,%s\n",$arrive,$last,$delay); print $DT; } } close(IN01); ただし、データの内容次第でつくりが違ってくるのでデータの条件をしっかり把握することが肝心です(順序が入れ替わるケースが無いかどうか、3種のうち欠ける物がないかどうかなど)。

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

「Frame」で始まる行がきたときに, 次の 3行を読み込んで処理する... だけかなぁ. 何も考えずに書くとこんな感じ? while (my $line = <>) { next unless $line =~ /^Frame/; my $arrive = <>; my $last = <>; my $delay = <>; $arrive =~ s/.*?:\s*//; $last =~ s/.*:\s*//; $delay =~ s/.*:\s*//; print "$arrive,$last,$delay\n"; }

関連するQ&A

  • パケットの見方教えてください。

    PINGをおこなってパケットの情報を見たのですが、何が何かわかりません。 Flags: 0x00 Status: 0x00 Packet Length:146 Timestamp: Ethernet Header Destination: 00:0A:95:6A:BB:78 Source: 00:A0:DE:0C:99:5B Protocol Type:0x0800 IP IP Header - Internet Protocol Datagram Version: 4 Header Length: 5 (20 bytes) Type of Service: %00000000 Precedence: Routine, Normal Delay, Normal Throughput, Normal Reliability Total Length: 128 Identifier: 22117 Fragmentation Flags: %010 Do Not Fragment Last Fragment Fragment Offset: 0 (0 bytes) Time To Live: 254 Protocol: 1 ICMP Header Checksum: 0xD3C0 Source IP Address: Dest. IP Address: No IP Options ICMP - Internet Control Messages Protocol ICMP Type: 8 Echo Request Code: 0 Checksum: 0x7E83 Identifier: 0x4244 Sequence Number: 0x0001 ICMP Data Area: Frame Check Sequence: 0x00000000 これって、どういう意味ですか? 英語も普通の訳とは違いますし、それぞれが何を表しているかもわかりません。もしよろしければ教えてください。 また、パケットについて詳しいサイトがあればそれもお願いします。

  • イーサネットのフレームサイズ

    すみません。素人です。 イーサネットのフレームサイズは最大1500bytesだと思います。 キャプチャしているとサイズが1820bytesのフレームがあります。 これはMTUが自動調整?された為なのでしょうか? No. Time Source Destination Protocol Length Info 824 14:44:01.923131000 192.168.3.66 192.168.3.63 TDS 1820 SQL batch Frame 824: 1820 bytes on wire (14560 bits), 1820 bytes captured (14560 bits) on interface 0 Interface id: 0 (\Device\NPF_{ECF8F6F2-31BA-4ECF-9C24-209B41990ECE}) Encapsulation type: Ethernet (1) Arrival Time: Jul 13, 2015 14:44:01.923131000 譚ア莠ャ (讓呎コ匁凾) [Time shift for this packet: 0.000000000 seconds] Epoch Time: 1436766241.923131000 seconds [Time delta from previous captured frame: 0.001591000 seconds] [Time delta from previous displayed frame: 0.001591000 seconds] [Time since reference or first frame: 23.520874000 seconds] Frame Number: 824 Frame Length: 1820 bytes (14560 bits) Capture Length: 1820 bytes (14560 bits) [Frame is marked: False] [Frame is ignored: False] [Protocols in frame: eth:ethertype:ip:tcp:tds] [Coloring Rule Name: TCP] [Coloring Rule String: tcp] Ethernet II, Src: WistronI_8c:90:96 (f8:0f:41:8c:90:**), Dst: FujitsuT_ec:2f:66 (00:19:99:ec:2f:**) Destination: FujitsuT_ec:2f:66 (00:19:99:ec:2f:**) Address: FujitsuT_ec:2f:66 (00:19:99:ec:2f:**) .... ..0. .... .... .... .... = LG bit: Globally unique address (factory default) .... ...0 .... .... .... .... = IG bit: Individual address (unicast) Source: WistronI_8c:90:96 (f8:0f:41:8c:90:**) Address: WistronI_8c:90:96 (f8:0f:41:8c:90:**) .... ..0. .... .... .... .... = LG bit: Globally unique address (factory default) .... ...0 .... .... .... .... = IG bit: Individual address (unicast) Type: IP (0x0800)

  • intの数字をtimestampに変換したい

    php5,mysql5.1の環境です。 mysqlのフィールドにint(11)でunix timestampを挿入しています。 その11桁の数字の羅列をunixのタイムスタンプ形式に変更したいのですがどのようにすればよいのでしょうか。 うまく説明できないのですが、その11桁の数字はタイムスタンプとしてphp側で処理できないのでしょうか。 mysqlの種別カラムにおいて、int(11)とtimestampは同一のデータとして処理できないのでしょうか。

    • ベストアンサー
    • PHP
  • MySQLのTimestamp(14)型のフィールドにYYYY/MM/DD hh:mm形式のデータをインサートするには

    MySQLのTimestamp(14)型のフィールドに YYYY/MM/DD hh:mm形式のデータをインサートするには どのようにしたらよいのでしょうか? MySQL の Timestamp(14)型(YYYY-MM-DD hh:mm:ss)のフィールドに YYYY/MM/DD hh:mm 形式のデータ(ssに該当するデータがない)を インサートするには、 PHPでどのようにしたらよいのでしょうか? できれば、インサートの際にssに自動的に00をつけたいです。 現在、PHPでinsert文を実行すると、データの桁数が足りないため、 フィールドの値は、0000-00-00 00:00:00になってしまいます。 同じ形式(YYYY/MM/DD hh:mm)のデータをphpMyAdminで インポートすると、自動的にssに00がつき、 YYYY-MM-DD hh:mm:ss(例 2009-10-20 12:10:00) となってくれます。 PHPでもphpMyAdminと同じ処理をしたいのですが、 インターネットで検索してもやり方が見つからず、 どのようにしたらよいのか、わかりません。。。 インサートするデータサイズが83MBと大きいので、 PHPで処理したいと思っています。 (phpMyAdminは8MBまでなので) ご存知の方がいましたら、教えていただけると、 助かります。m(_ _)m レンタルサーバー:さくら インサートするファイル:CSVファイル PHP 5.2.x MySQL 5.1 phpMyAdmin 3.1.3.1

    • ベストアンサー
    • MySQL
  • MySQLのTIME型データをPHPで表示変更したいです。

    PHPとMySQLで、時間情報の取り扱いを試しています。 まず、MySQLにはTIME型で「10:00:00」などの時刻情報を格納しています。 それを、PHPでSELECTしてHTMLの中に表示したいのですが、 その際、2つの点でうまくいかずに困っています。 1 PHPでHTMLの中に表示するときには、「時」と「分」だけの、「10:00」の形式で表示したいのですが、方法がわかりません。 (いくつか関数を試しても、どれもTIMESTAMP型を扱うものでした) 2 例えば、「4時」のデータの場合「04:00:00」となりますが、これを「4:00」のように語頭の0を削って表示したいです。 おそらくどちらもMySQLに格納する方法を文字列型にすればいいのかとも思うのですが、SELECTの際に現在時刻との比較(現在時刻より早いか遅いかなど)を行いたいので、それができません。 何かいい方法がありましたら、教えて頂ければありがたいです。 

    • 締切済み
    • PHP
  • csvデータ出力

    いつもお世話になっています。今回は・・・ csvファイルに書かれた情報を一覧表示するやり方は何とか判ったのですが (↓でdata.csvの情報が全て表示される) open(IN, "data.csv"); while (<IN>) { print $_; } close(IN); 一つ目のデータを参照してマッチした場合にその列を表示する。というやり方が全くわかりません; とほほさん等で調べてみたのですが、全くわかりませんでした; やりたいことは例えば・・・ csvファイルの中身の情報が 4,データ1,データ1の説明 4,データ2,データ2の説明 5,データ3,データ3の説明 5,データ4,データ4の説明 5,データ5,データ5の説明 12,データ6,データ6の説明 だとすると、一番最初の行の数字5にマッチすると 5,データ3,データ3の説明 5,データ4,データ4の説明 5,データ5,データ5の説明 を表示する。というような事がやりたいのです。 急ぎではありませんので、自分でも他のperl情報サイトで調べながら回答を待ちたいと思います。 よろしくお願いします

    • ベストアンサー
    • Perl
  • LinkStationのデータをレスキューしたい

    こんにちは。 Buffalo社のlinkstation、WVLシリーズを利用しています。 先日使用中にエラーが表示されてしまい、現在ファイルに アクセスする事が出来ない状況です。 サポートに問い合わせたところ、修理はするがデータの保証は 出来ない、どうしても必要なら復旧業者へ連絡をと言われました。 業者に依頼すると非常に高くつく為、自力での復旧を考えております。 サポートに確認したところ、HDDのフォーマットはXFS形式との事でした。 色々と調べ、KNOPPIXであれば参照が可能との事でしたので、 KNOPPIX6.7.1(CD版)をDLし、起動しています。 HDDはUSB接続するケーブルが無い為、パソコン内のSATAへ直接 接続しています。 システムターミナル(スーパーユーザーモード)を起動し、fdiskで調べたところ、 -------------------------------- Disk /dev/sda: 500.1 GB, 500107862016 bytes 255 heads, 63 sectors/track, 60801 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0xbb22ba90 Device Boot Start End Blocks Id System /dev/sda1 * 1 13 102400 7 HPFS/NTFS Partition 1 does not end on cylinder boundary. /dev/sda2 13 60802 488282112 7 HPFS/NTFS WARNING: GPT (GUID Partition Table) detected on '/dev/sdb'! The util fdisk doesn't support GPT. Use GNU Parted. Disk /dev/sdb: 2000.4 GB, 2000398934016 bytes 255 heads, 63 sectors/track, 243201 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Sector size (logical/physical): 512 bytes / 4096 bytes I/O size (minimum/optimal): 4096 bytes / 4096 bytes Disk identifier: 0x00000000 Device Boot Start End Blocks Id System /dev/sdb1 1 243202 1953514583+ ee GPT Partition 1 does not start on physical sector boundary. -------------------------------- と出力されました。 sda1は、元々からのHDD、sdb1が、今回問題のLinkstationのHDDです。 しかしファイルマネージャーで開いてもsdb1は認識されておらず、 開く事が出来ない状態です。 認識させるにはマウントやら色々と必要であるとの事が書かれてありましたが、 Linuxはもとより、こうした知識がほとんどなく、手詰まり状態となっています。 HDDは論理障害で内部のデータはおおよそ復旧できるものと 考えているのですが、この先どのようすればよいか、ご教授頂きたく思います。 またその他良い方法などありましたら、併せてご教授頂ければと考えております。

  • クイックWeb設定

    WR8500nのルータを無線LANで使用してます。 クイックWeb設定のIPをデフォルトゲートウェイ(192.168.0.1)に設定したハズなんですが、なぜか繋がりません。 pingを使って192.168.0.xで繋がったものだけコピーしてみました。 Pinging 192.168.0.1 with 32 bytes of data:  Reply from 192.168.0.1: bytes=32 time<1ms TTL=255 Ping statistics for 192.168.0.1: Packets: Sent = 1, Received = 1, Lost = 0 (0% loss), Approximate round trip times in milli-seconds: Minimum = 0ms, Maximum = 0ms, Average = 0ms Pinging 192.168.0.2 with 32 bytes of data:  Reply from 192.168.0.2: bytes=32 time=53ms TTL=64 Ping statistics for 192.168.0.2: Packets: Sent = 1, Received = 1, Lost = 0 (0% loss), Approximate round trip times in milli-seconds: Minimum = 53ms, Maximum = 53ms, Average = 53ms Pinging 192.168.0.3 with 32 bytes of data:  Reply from 192.168.0.3: bytes=32 time=81ms TTL=255 Ping statistics for 192.168.0.3: Packets: Sent = 1, Received = 1, Lost = 0 (0% loss), Approximate round trip times in milli-seconds: Minimum = 81ms, Maximum = 81ms, Average = 81ms 現在、インターネットには繋がってますが、クイックWeb設定には繋がりません。原因はどこにあるのか教えていただけないでしょうか。 以上よろしくお願いします。

  • DVD-RAM内のデータの消去法は?

    DVD Decypterで一度新しいDVD-RAMに書き込みをしました。 そのデータを消して再度別のデータを書き込もうと思って、マイコンピューター→MEI UDF(:E)のところで右クリック→フォーマットしました。 再度DVD Decypterを開くと、画面右に次のようにでて書き込みが出来ません。どう対処すればよいでしょうか? Disc Information: Status: Others Erasable: Yes Sessions: 1 Sectors: 2,236,704 Size: 4,580,769,792 bytes Time: 497:04:54 (MM:SS:FF) Physical Format Information (Last Recorded): Book Type: DVD-RAM Part Version: 6 Disc Size: 120mm Maximum Read Rate: Not Specified Number of Layers: 1 Track Path: Parallel Track Path (PTP) Linear Density: 0.280 to 0.291 um/bit Track Density: 0.615 um/track

  • エラーメッセージが返ってきます。

    パソコンから相手にメールを送ったのですがこのようなメッセージが返ってきました。 いったいどういうことなのでしょうか? 以下文字が連続している部分はプライバシー保護のために変えています。 同じ文字列は同じアドレスだと思ってください。 送った相手のメールアドレスは BBBBBBBBB@KKK.itscom.net です The original message was received at Sat, 20 Dec 2008 03:15:31 +0900 (JST) from YYYYYYY111 [192.168.AA.BB] ----- The following addresses had permanent fatal errors ----- <XXXXXXXXX%docomo.ne.jp@[192.168.CC.DD]> (reason: 552 Too much mail data XXXXXXXXX@docomo.ne.jp) ----- Transcript of session follows ----- ... while talking to MMMMMMM.docomo.ne.jp.: >>> DATA <<< 552 Too much mail data XXXXXXXXX@docomo.ne.jp 554 5.0.0 Service unavailable またこのメッセージには添付ファイルがついていまして、 メモ帳で中身を見るとこうなっていました。 Reporting-MTA: dns; TTTTTTTTT.NN.itscom.net Received-From-MTA: DNS; YYYYYYY222 Arrival-Date: Sat, 20 Dec 2008 03:12:24 +0900 (JST) Final-Recipient: RFC822; XXXXXXXXX@docomo.ne.jp Action: failed Status: 5.2.2 Remote-MTA: DNS; MMMMMMM.docomo.ne.jp Diagnostic-Code: SMTP; 552 Too much mail data XXXXXXXXX@docomo.ne.jp Last-Attempt-Date: Sat, 20 Dec 2008 03:12:25 +0900 (JST)

専門家に質問してみよう