Sql 创建文件名依赖于内容
我有一个SQL转储。我已使用Sql 创建文件名依赖于内容,sql,bash,awk,Sql,Bash,Awk,我有一个SQL转储。我已使用sed处理其内容,以生成当前表单 7022,4749463839619600C700F700000000000101010.... 9254,47494638396196008300F700000000003737373.... 2613,FFD8FFE000104A4649460001020100C800C8000.... ...... 我想生成多个文件,文件名为冒号前面的字段(7022,9254,2613),扩展名依赖于第二个字段。如果以4749开头,则扩展名为
sed
处理其内容,以生成当前表单
7022,4749463839619600C700F700000000000101010....
9254,47494638396196008300F700000000003737373....
2613,FFD8FFE000104A4649460001020100C800C8000....
......
我想生成多个文件,文件名为冒号前面的字段(
7022
,9254
,2613
),扩展名依赖于第二个字段。如果以4749
开头,则扩展名为.gif
else.jpeg
。文件内容是第二个字段。如果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;
}
#/usr/bin/perl
使用警告;
严格使用;
我的$debug=1;
而(){
咀嚼;
我的($basename,$data)=拆分',';
我的$ext=($data=~/^4749/)?“gif”:“jpeg”;
我的$filename=“$basename.$ext”;
如果$debug,则打印“为$filename写入数据:$data\n”;
my$bytes=pack“H*”,$data;
打开(我的$file,“>$filename”);
打印$file$字节;
关闭$file;
}
您可以使用awk
轻松创建文件:
$ls
file.sql
$cat file.sql
70224749463839619600C7000000000000101010
925447494638396196008300f700000000373
2613,FFD8FFE0000104A4649460001020100C800C8000
$awk-F,“{$2~/^4749/?F=$1.gif”:F=$1.jpeg”系统(“xxd-r-p-”F“这可能会起作用
#!/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
!/bin/bash
如果s=','
读取名称数据时,请执行以下操作:
m=${data:0:4}
案件价值百万元
4749)
ext=gif;;
*)
ext=jpeg;;
以撒
xxd-r-p-$name.$ext“反向hextump”是什么意思?向我们展示您的代码,甚至是您所做的努力。我的意思是从hex dump创建二进制文件。例如xxd-r
我想他希望您使用命令“xxd-r”过滤生成的文件“我认为这是错误的,因为你打印$2>f
时,你最有可能应该将十六进制表示转换为字节。@MichaWiedenmann manu fatto感谢各位的澄清。我只想将十六进制数据转换回二进制。:)为了找回原始文件…对不起,我的英语不好。。)