1

SQL ダンプがあります。sed現在のフォームを作成するために使用してコンテンツを処理しました。

7022,4749463839619600C700F700000000000101010....
9254,47494638396196008300F700000000003737373....
2613,FFD8FFE000104A4649460001020100C800C8000....
......

7022ファイルの名前がコロン ( 、92542613) の前のフィールドであり、拡張子が 2 番目のフィールドに依存している複数のファイルを生成したい。で始まる場合4749、拡張子は.gifelseになります.jpeg。ファイルの内容は、逆 16 進ダンプされた 2 番目のフィールドです。

4

3 に答える 3

2

以下を使用してファイルを簡単に作成できますawk

$ ls
file.sql 

$ cat file.sql
7022,4749463839619600C700F700000000000101010
9254,47494638396196008300F700000000003737373
2613,FFD8FFE000104A4649460001020100C800C8000

$ awk -F, '{$2~/^4749/?f=$1".gif":f=$1".jpeg";system("xxd -r -p - "f"<<<"$2)}' file.sql

$ ls
2613.jpeg  7022.gif  9254.gif  file.sql

$ file 7022.gif 
7022.gif: GIF image data, version 89a, 150 x 199

$ xxd 7022.gif 
0000000: 4749 4638 3961 9600 c700 f700 0000 0000  GIF89a..........
0000010: 0101 01                                  ...
于 2013-03-10T14:12:02.953 に答える
0

これはうまくいくかもしれません...

#!/bin/bash
IFS=','
while read name data dummy; do
  m=${data:0:4}
  case $m in
    4749)
      ext=gif ;;
    *)
      ext=jpeg ;;
  esac
  xxd -r -p - $name.$ext <<<$data
done
于 2013-03-10T14:51:43.573 に答える
0

perl に問題がない場合は、次のスクリプトを使用できます。

#!/usr/bin/perl

use warnings;
use strict;

my $debug = 1;

while (<>) {
  chomp;

  my ($basename, $data) = split ',';

  my $ext = ($data =~ /^4749/) ? 'gif' : 'jpeg';

  my $filename = "$basename.$ext";

  print "writing data for $filename: $data\n" if $debug;

  my $bytes = pack "H*", $data;

  open (my $file, ">$filename");
  print $file $bytes;
  close $file;
}
于 2013-03-10T13:45:25.890 に答える