批量檔案比對

2021-06-01 01:37:18 字數 3701 閱讀 6656

前幾天就有研發人員發現了相同網元的兩台機器的配置檔案有些不同的地方,今天無聊就幫研發人員將這些差異比對出來。

研發自己有比較工具,這個指令碼太複雜,而且為了配合使用這個指令碼還寫了9頁的指導文件,因為懶得看文件和熟悉那個超複雜的指令碼,就用我自己的方式來比對。

本著懶人原則,用最簡單的語句,搞定最複雜的工作。 

檔案比對步驟:(以cbp為例寫步驟)

2.列出檔案的詳細資訊

cd cbp1

find ./ -name "*" -exec ls -ld {} \; |grep -v ^d|sort -k9,9 > ../cbp1.ll

cd ../cbp2

find ./ -name "*" -exec ls -ld {} \; |grep -v ^d|sort -k9,9 > ../cbp2.ll

3.列出檔名

cd ..

cat cbp1.ll |awk '' > cbp1.ls

cat cbp2.ll |awk '' > cbp2.ls

4.比對檔名列表,找出檔名不同的

先看檔案總數: cbp1 有811個檔案,cbp2有 796 個檔案

wc cbp1.ls

wc cbp2.ls

比對檔案列表:

diff cbp1.ls cbp2.ls

得出結果如下:

2c2< ./cbeser.cfg_20110524_xc

---> ./cbeser.cfg_20110525_xc

54d53

< ./de/chg_2179_0_en.msg

134d132

< ./dv/chg_2179_0_en.msg

183d180

< ./en/chg_2017_0_en.msg_xc_20110804

190,191d186

< ./en/chg_2046_0_en.msg.bak0906

< ./en/chg_2046_0_en.msg_20110729_xc

218d212

< ./en/chg_2179_0_en.msg.bak0809..

.看到不同的大部分都是cbp1多了檔案,再寫比對各個檔案內容的指令碼

5.生成比對檔案內容的指令碼

cat cbp2.ls |awk '' > comcbp.sh

chmod 755 comcbp.sh

vi comcbp.sh --往指令碼的第一行加入魔法位元組  #!/bin/sh

6.執行比對指令碼,得到結果:

./comcbp.sh 1> cbp.resoult 2>&1

7.整理結果:

cbp.resoult 內容如下:

./cbeser.cfg

./cbeser.cfg_20110525_xc

diff: cbp1/./cbeser.cfg_20110525_xc: no such file or directory

./cbeser.cfg_20111013

6,7c6,7

< timeformat = dd-mm-yyyy

出現類似這樣以< 或》 開頭的行,以 ---  為界,上面是cbp1,下面是cbp2的內容

< dateformat = dd/mm/yyyy hh:mm:ss

---> timeformat = yyyy-mm-dd

> dateformat = dd/mm/yyyy hh:mm:ss 

這段內容的上一行是位置,再上一行是檔名,把這些保留,其餘的都手動刪除。

./cbeser.csh

./de/chg_1000_0_de.msg

./de/chg_1001_0_de.msg

./de/chg_1002_0_de.msg

./de/chg_1003_0_de.msg

./de/chg_1004_0_de.msg

./de/chg_1005_0_de.msg

./de/chg_1006_0_de.msg

./de/chg_1007_0_de.msg

./de/chg_1009_0_de.msg..

.呵呵,這步麻煩點,輸出結果格式不規範,誰叫指令碼簡單呢

8.再比對一下檔案的許可權是否相同

cat cbp1.ll |awk '' > cbp1.ll.0

cat cbp2.ll |awk '' > cbp2.ll.0

diff cbp1.ll.0 cbp2.ll.0

物理庫比對(以sysdb為例寫步驟)

1.在scp1和scp2上以sys使用者登入sqlplus執行以下語句,得到sysdb使用者擁有的表名,結果輸出到tab.sql

set pagesize 9999

spool tab.sql

select table_name from dba_tables where owner='&owner' order by 1;

spool off

2.比對錶名

scp scp1a_stb:/opt/oracle/tab.sql ./scp1tab

scp scp2a_stb:/opt/oracle/tab.sql ./scp2tab

diff -b scp1tab scp2tab 1> scptab.resoult 2>&1

得到的結果如下

50a51

> checktab

177d177

< ussdservicekey_bak

244d243

< w_uvs_message_mg835

3.在scp1和scp2上再執行以下語句,得到sysdb表名相同的表擁有的字段,結果輸出到tab_colu.sql

set line 140

set pagesize 9999

col table_name for a35

col column_name for a30

col data_type for a20

spool tab_colu.sql

select table_name,column_name,data_type from dba_tab_columns where owner='&owner'

and table_name in (select table_name from dba_tables where owner='&owner')

and table_name not in ('ussdservicekey_bak','w_uvs_message_mg835','checktab')

order by 1,2,3;

spool off

4.比對欄位名

scp scp1a_stb:/opt/oracle/tab_colu.sql ./scp1tab_colu

scp scp2a_stb:/opt/oracle/tab_colu.sql ./scp2tab_colu

diff -b scp1tab_colu scp2tab_colu 1> scptab_colu.resoult 2>&1

小結:比對資料庫更簡單了,比對錶名,再比對欄位名,這些都可以用一條語句列出,再用diff命令比對 。

記憶體庫的比對:

1.在主備雙機上用以下命令匯出資料庫的結構:

mdexport -s -f all.sql

2.用oracle sql dev 比較工具比對

python 檔案比對

coding utf 8 class data def init self,a b self.a a self.b b def return data self return self.a,self.b class createobject def init self,class name null...

批量bwa比對和samtools排序

拿到fastq檔案後,要進行比對和排序 第一步是對reference建立索引 bwa index a bwtsw reference 對於大基因組建立fm index bwa index a is ref.fasta 對小基因組建立index,速度快,記憶體消耗大第二步,批量比對和排序 2.使用bw...

Git檔案內容的比對

git status 只能檢視區域狀態的不同,不能檢視檔案的內容不同之處 root git git test git status on branch master changes not staged for commit use git add to update what will be co...