文本文件行处理,8进制数据替换成16进制

使用gawk 完成,由shell 查找所有需要处理的文件,然后通过管道送给awk处理,awk 一个文件一个文件处理,故使用了BEGINFILE 和ENDFILE 两个模式,即在文件开始处理之前生成一个临时文件,用来存储awk 处理之后输出的内容(awk 中使用重定向输出到临时文件);文件处理之后判断是否需要替换原来的文件。


使用时可以单个文件处理,即awk -f FILE.awk   yourfile;也可以同时处理多个文件,使用shell 命令: 


find -name PATTERN_NAMES | xargs awk -f FILE.awk



所有代码如下:


#!/bin/awk
BEGIN {
    FS = ":"
}

BEGINFILE {
    tmp_name = FILENAME "__tmp.sig__";
    same_file = 1;
    system ("rm -f " tmp_name);
    system ("touch " tmp_name);
}

{
    if ($1 == "regex" && match($2, "\\\\[0-9][0-9][0-9]")) {
        same_file = 0;
        left = $2;
        result = "";
        do {
            len = length(left);
            if (RSTART > 1) {
                result = sprintf("%s%s", result, substr(left, 1, RSTART - 1));
            }
            hex = sprintf("0%s", substr(left, RSTART + 1, RLENGTH - 1));
            result = sprintf("%s\\x%x", result, strtonum(hex));
            len += 1;
            left = substr(left, RSTART + RLENGTH, len - RSTART - RLENGTH);
        } while (match(left, "\\\\[0-9][0-9][0-9]"));

        result = sprintf("regex:%s%s", result, left);
        print result >> tmp_name;
    }
    else {
        print $0 >> tmp_name;
    }
}

ENDFILE {
    if (same_file == 0) {
        system ("mv " tmp_name " " FILENAME);
    }
    same_file = 1;
    system ("rm -f " tmp_name);
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 要将bin文件转换成16进制txt文件,可以使用MATLAB中的文件操作函数。 首先,使用fopen函数打开bin文件,以二进制形式读出文件内容。例如: ```matlab fid = fopen('input.bin', 'rb'); data = fread(fid, 'uint8'); fclose(fid); ``` 这将打开名为input.bin的文件并将其读取为一个包含原始二进制数据的1维数组data。 接下来,使用dec2hex函数将二进制数据转换为16进制字符串。然后,将转换后的数据写入txt文件。例如: ```matlab hexData = dec2hex(data); fid = fopen('output.txt', 'wt'); fprintf(fid, '%s\n', hexData(:)'); fclose(fid); ``` 这将创建名为output.txt文件,并将转换后的16进制数据写入其中。 完整的MATLAB代码如下: ```matlab fid = fopen('input.bin', 'rb'); data = fread(fid, 'uint8'); fclose(fid); hexData = dec2hex(data); fid = fopen('output.txt', 'wt'); fprintf(fid, '%s\n', hexData(:)'); fclose(fid); ``` 请注意替换文件名和路径以适应你的实际情况。 ### 回答2: 要使用MATLAB将二进制文件转换为16进制文本文件,可以按照以下步骤操作: 1. 打开MATLAB软件,并进入命令窗口。 2. 使用`fid = fopen('file.bin','rb')`命令打开要转换的二进制文件。其中,`'file.bin'`是需要转换的二进制文件文件名,可以根据实际情况进更改。 3. 使用`data = fread(fid, 'uint8')`命令读取二进制文件的内容,并将其存储在一个矩阵中。`uint8`表示将数据读取为8位无符号整数。 4. 使用`fclose(fid)`命令关闭已打开的二进制文件。 5. 使用`hex_data = dec2hex(data)`命令将读取的二进制数据转换为16进制字符串。 6. 使用`fid = fopen('file.txt','wt')`命令创建一个新的文本文件,以便将16进制数据写入其中。其中,`'file.txt'`是要保存的16进制文本文件文件名,可以根据实际情况进更改。 7. 使用`fprintf(fid, '%s\n', hex_data')`命令将转换后的16进制数据写入文本文件,每个转换后的数据占一。 8. 使用`fclose(fid)`命令关闭已保存的16进制文本文件。 以上步骤完成后,你将获得一个包含转换后的16进制数据文本文件。可以使用文本编辑器打开该文件查看和使用。 ### 回答3: 要将bin文件转换成16进制txt文件,可以使用MATLAB中的文件操作和数据转换函数。 首先,使用MATLAB的文件读取函数`fread`读取bin文件数据。例如,使用以下代码将bin文件数据读入MATLAB的变量中: ``` fid = fopen('input.bin','rb'); % 打开bin文件 data = fread(fid); % 读取数据 fclose(fid); % 关闭文件 ``` 然后,使用MATLAB的数据转换函数`dec2hex`将读取的二进制数据转换为16进制表示。例如,使用以下代码将bin文件数据转换为16进制字符串: ``` hex_data = dec2hex(data); % 转换为16进制字符串 ``` 最后,将转换后的16进制数据写入txt文件。使用MATLAB的文件写入函数`fprintf`将数据写入txt文件。例如,使用以下代码将16进制数据写入txt文件: ``` fid = fopen('output.txt','w'); % 打开txt文件 fprintf(fid, '%s\n', hex_data'); % 写入16进制数据 fclose(fid); % 关闭文件 ``` 以上代码中的'input.bin'表示输入的bin文件名,'output.txt'表示输出的txt文件名。可以根据实际情况进修改。 将上述代码综合起来,可以实现将bin文件转换为16进制txt文件
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值