[20251113]建立完善fffext.sh脚本.txt

news/2025/11/19 21:32:33/文章来源:https://www.cnblogs.com/lfree/p/19244115
[20251113]建立完善fffext.sh脚本.txt

--//以前写过一个通过bbed查看数据块的bash shell脚本,别人使用发现存在问题。

$ . fffext.sh 9 225 225 15 ncnnnnnnnnnnnnnnnnncct| head -4
0|SYSTEM|0|1|128|0|0|0|0|0|3|0|||||0
1|_SYSSMU1_274027410$|1|21|128|63392027|0|11318|1269|0|3|2|||||2
2|_SYSSMU2_3565078997$|1|21|144|63392033|0|11251|1776|0|3|2|||||2
col    0[2] @737: 3 col   1[18] @740: _SYSSMU3_69012697$col    2[2] @759: 1 col    3[2] @762: 21 col    4[3] @765: 160 col    5[5] @769: 63392035 col    6[1] @775: 0 col    7[4] @777: 11427 col    8[3] @782: 1008 col    9[1] @786: 0 col   10[2] @788: 3 col   11[2] @791: 2 col   12[0] @794: *NULL*col   13[0] @795: *NULL*col   14[0] @796: *NULL*col   15[0] @797: *NULL*col   16[2] @798: 2

--//取第4条记录时出现问题。使用bbed查看:
BBED> x /rncnnnnnnnnnnnnnnnnncct dba 9,225 *kdbr[3]
rowdata[0]                                  @734
----------
flag@734:  0x2c (KDRHFL, KDRHFF, KDRHFH)
lock@735:  0x00
cols@736:    17

col    0[2] @737: 3
col   1[18] @740: _SYSSMU3_69012697$
col    2[2] @759: 1
col    3[2] @762: 21
col    4[3] @765: 160
col    5[5] @769: 63392035
col    6[1] @775: 0
col    7[4] @777: 11427
col    8[3] @782: 1008
col    9[1] @786: 0
col   10[2] @788: 3
col   11[2] @791: 2
col   12[0] @794: *NULL*
col   13[0] @795: *NULL*
col   14[0] @796: *NULL*
col   15[0] @797: *NULL*
col   16[2] @798: 2

BBED> x /rncnnnnnnnnnnnnnnnnncct dba 9,225 *kdbr[0]
rowdata[7412]                               @8146
-------------
flag@8146: 0x2c (KDRHFL, KDRHFF, KDRHFH)
lock@8147: 0x00
cols@8148:   17

col    0[1] @8149: 0
col    1[6] @8151: SYSTEM
col    2[1] @8158: 0
col    3[2] @8160: 1
col    4[3] @8163: 128
col    5[1] @8167: 0
col    6[1] @8169: 0
col    7[1] @8171: 0
col    8[1] @8173: 0
col    9[1] @8175: 0
col   10[2] @8177: 3
col   11[1] @8180: 0
col   12[0] @8182: *NULL*
col   13[0] @8183: *NULL*
col   14[0] @8184: *NULL*
col   15[0] @8185: *NULL*
col   16[1] @8186: 0

--//发现有问题的偏移仅仅百位,才发现自己的代码写死了,限制仅仅13个字符,修改如下13改为11,14,这样就没有问题了:
--//注:里面的^G在vim的linux的插入模式下按ctrl+v ctrl+G 输入,实际上单个字符。windows按ctrl+q,ctrl+g。
--//还有^F类似。

--//补充说明脚本里面rlbbed。我定义为函数,修改为别名应该也可以。
--//执行的前面要加入点或者使用source开头。也可以先执行如下,在直接执行。
--//export -f rlbbed.
--//或者
--//declare -x -f NAME

$ which $BBED
/u01/app/oracle/product/21.0.0/dbhome_1/bin/bbed

$ export RLWRAP=$(which rlwrap)
$ type rlbbed
rlbbed is a function
rlbbed ()
{
    cd /home/oracle/bbed;
    $RLWRAP -s 9999 -c -r -i -f /usr/local/share/rlwrap/bbed $BBED parfile=bbed.par cmdfile=cmd.par
}

$ cat bbed.par
blocksize=8192
listfile=filelist.txt
mode=edit
PASSWORD=blockedit
SPOOL=Y

$ cat cmd.par
set count 64
set width 160

--//filelist.txt文本可以通过如下输出建立。
select lpad(file#,6,' ')||'  '||name filelist from v$dbfile order by file#;

--//fffext.sh代码如下:
$ cat -v fffext.sh
#! /bin/bash
# argv1=file_number argv2=begin_block argvs3=end_block argv4=data_object_id argv5=bbed /x format
#set -x
file_number=$1
begin_block=$2
end_block=$3
data_object_id=$4
ff="/r"${5}

# create sed script.
a=$5
len=$( echo ${#a} )
seq $len | xargs -IQ expr substr $a Q 1 | grep -n '[nt]' | sed  's+:.$+s/ $//+' >| ff.sed
echo 's+^\*NULL\*$++g' >> ff.sed

# scan begin_block to end_block,define search scope.
/bin/rm scan1.txt 2>/dev/null
#seq  -f "%-1.0f" $begin_block $end_block | xargs -IQ echo -e "host echo $file_number,Q \np /d dba $file_number,Q ktbbh.ktbbhsid.ktbbhod1" | \
#rlbbed | grep "^BBED" | egrep "$file_number,|ub4 ktbbhod1" | awk '{print $NF}' | paste -d" " - - | awk -v a=$data_object_id '$2==a {print $1}' >| scan1.txt
seq  -f "%-1.0f" $begin_block $end_block | xargs -IQ echo -e "host echo -n $file_number,Q \np /d dba $file_number,Q ktbbh.ktbbhsid.ktbbhod1" | \
rlbbed | grep -B1 --no-group-separator "ub4 ktbbhod1" | awk '{print $NF}' | paste -d" " - - | awk -v a=$data_object_id '$2==a {print $1}' >| scan1.txt

# scan2 kdbr and display record.
cat scan1.txt |while read dba
do
    #echo $dba
    kdbr_size=$(echo p dba $dba kdbt[0].kdbtnrow | rlbbed| grep kdbtnrow | awk '{print $NF}')
    #echo $kdbr_size

    begin=0
    end=$[ kdbr_size -1 ]
    #echo $begin $end

    #echo set dba $dba
    IFSOLD=$IFS
    echo p dba $dba offset 0 kdbr | rlbbed | grep "sb2 kdbr" | sed "1s/^BBED> //" | awk -F"[][ ]+" -v a=$kdbr_size '$NF > a {print $3}' | \
    sed "s+^+x $ff dba $dba *kdbr[+;s+$+]+"| rlbbed | sed -n '/^col /,/^BBED> /{s/^col .\{11,14\}: /^G/;/^$/d;/^BBED> /s/^.*$/^F/;p;}'| tr -d "\n\r" | \
    awk 'BEGIN{RS="^F"} {print $0}' | while read line
    do
       echo "$line" | sed "s/^G//" | tr "^G" "\n" | sed -f ff.sed| paste -sd"|"
    done
done

$ . fffext.sh 9 225 225 15 ncnnnnnnnnnnnnnnnnncct| head -4
0|SYSTEM|0|1|128|0|0|0|0|0|3|0|||||0
1|_SYSSMU1_274027410$|1|21|128|63392027|0|11318|1269|0|3|2|||||2
2|_SYSSMU2_3565078997$|1|21|144|63392033|0|11251|1776|0|3|2|||||2
3|_SYSSMU3_69012697$|1|21|160|63392035|0|11427|1008|0|3|2|||||2
--//现在就没有问题了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/970401.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ubuntu25 win11 双系统 和一些常用配置

UEFI 双系统 只有一个硬盘的情况: 磁盘分2个分区,先安装 win11 ,会自动创建 EFI 分区和恢复分区和主分区,安装完成后在安装 ubuntu25 ,因为 从 25版本开始,可以自定义安装 EFI 到指定分区,以前的老版本都不行。…

解码线程调度与信号响应

Linux 线程调度策略 调度核心概念 线程是 Linux 系统调度的最小单位,进程作为线程的容器,可包含一个或多个线程。Linux 内核采用抢占式调度机制:高优先级线程可抢占正在运行的低优先级线程的 CPU 使用权;同优先级线…

LEANN:一个极简的本地向量数据库

在软件开发领域,提到轻量级、嵌入式的本地数据库,我们首先会想到 SQLite,它快速且无需独立服务进程。现在检索增强生成(RAG)和向量数据库的世界里,一个定位相似的新工具出现了。你可以把LEANN看作是嵌入式、轻量…

extern C的深入理解

cpp文件调用了 .c 文件的函数,对于单独的.c/.h 这样一对的文件, 可以在.h文件中写明 extern “C”, 但是不需要在 .c 中写明? 答: 不完全正确(所以你的理解基本正确,但需要加上条件编译这个关键条件!), 这是…

详细介绍:技术人互助:城市级充电系统(Java 微服务)的落地细节,含 demo 和设备适配经验

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

浅记树分块

其实我觉得以我的水平考场大概率用不出来树分块,但由于它太难写了,所以我还是写一下 题 树分块,顾名思义,和序列分块一样,把树也分成很多块,然后就可以根号复杂度处理一些问题,具体地,我们选\(\sqrt{n}\)个点,…

XPath表达式解析与应用

本篇内容来自AI的解读,用于后续温习回顾xpath的使用$x("//div[@class=ec-accordion and (./div[@class=ec-accordion-title and ./span[text()=Prerequisites]])]") 各部分含义:(1) //div - 选择文档中所有…

2025中国防晒品牌榜出炉!按肤质/场景选!

2025中国防晒品牌榜出炉!按肤质/场景选!宝子们!夏天防晒选不对,再贵的护肤品都白费~其实选防晒的核心超简单:看肤质+看场景,没有“万能款”!今天整理了2025年天猫618热卖榜、亚洲皮肤健康联盟口碑榜的权威推荐…

linux ftp使用

在 Linux 系统中,ftp 是一个用于通过 FTP 协议进行文件传输的命令行工具。它通常用于与远程服务器进行交互,例如上传或下载文件。? 一、使用 ftp 的基本命令 1. 连接 FTP 服务器 ftp <hostname><hostname&…

linux ftp代码

在 Linux 系统中,ftp 命令行工具是用于与 FTP 服务器进行交互的常用工具。它本身是一个命令行 FTP 客户端,但需要注意的是,ftp 已在大多数现代 Linux 发行版中被弃用,推荐使用 vsftpd(FTP 服务器)或 lftp(更现代…

linux ftpgt;put

你提到的 ftp>put 是 FTP(File Transfer Protocol) 命令行工具中的一个命令,用于在 FTP 客户端 中上传文件。? 一、ftp 命令行工具简介 ftp 是 Linux/Unix 系统中用于通过 FTP 协议 与远程服务器进行文件传输的…

题解 [YLOI 2019] 棠梨煎雪

题解 [YLOI 2019] 棠梨煎雪原文来自CnBlogs, 作者: young_tea.

2025-11-19

CF Problem - 1418C - Codeforces(dp+贪心好题!)(1500) dp操作,要分开判断先手和后手 #include <bits/stdc++.h> using namespace std; #define LL long long const LL mod = 998244353; const int N=2e5+…

docker 自用手册

问题 用id删除镜像,报错Error response from daemon: No such image: 15e:latest 原因就在于,我也不知道。其他镜像并没有以15e开头,反正不知道为什么。 但是解决办法就是,多输几位ID,实在不行就直接名称删除。我…

Gemini 3发布与小试牛刀

Gemini 3发布与小试牛刀Google Gemini 3 技术范式与生态系统深度研究报告发布日期:2025年11月Gemini 3 架构特性、多模态推理能力、智能体式开发环境(Antigravity)与市场竞争格局分析1. 引言:从对话智能到代理智能…

落山基唬人队 第二次团队作业——原型设计+概要设计

这个作业属于哪个课程 https://edu.cnblogs.com/campus/fzu/202501SoftwareEngineering这个作业要求在哪里 https://edu.cnblogs.com/campus/fzu/202501SoftwareEngineering/homework/13559这个作业的目标 原型设计+概…

kilocode_idea端测试

kilo code 4.113.1 大模型 glm4.6 用HTML、CSS和JavaScript(若更偏好p5.js也可选用),创建一个带有动画效果的天气卡片。要在卡片里呈现当前温度、具体位置以及天气状况,像晴天、雨天、多云这些常见天气类型都要覆盖。…

【触想智能】工业一体机在户外使用要注意的问题分享

工业一体机是一种集成了计算机、显示器、触摸屏和其他功能的设备,广泛应用于各种工业领域,包括制造业、物流、交通管理等。由于其强大的性能和可靠性,工业一体机在户外环境中的使用成为一种趋势。触想工业一体机TPC…

#20232329 2025-2026-1 《网络与系统攻防技术》实验八实验报告

#20232329 2025-2026-1 《网络与系统攻防技术》实验八实验报告1.实验内容 1)Web前端HTML:能正常安装、启停Apache。理解HTML,理解表单,理解GET与POST方法,编写一个含有表单的HTML。 2)Web前端javascipt:理解Jav…

IDEA Debug使用方法

Step over 一行一行往下走 Step into 进入方法内部/force step into Step out 跳出当前类 Run to cursor 跳到当前光标的位置执行 Evaluate Expression 在里面执行任何一个java语句,可以查看当时的状态断点普通行断点…