1. 程式人生 > >Shell_Linux_Shell指令碼庫_日誌處理中寫的一些指令碼

Shell_Linux_Shell指令碼庫_日誌處理中寫的一些指令碼

最近博主被分配了一項緊急任務,事情有些緊急,花了兩天的時間學習Shell,並完成了一項任務.自認為還算不錯,

接下來分享下處理這個任務中所編寫的一些指令碼,就算留作紀念吧

用到的技術點

0.常用的 Linux命令  cat / grep / sed / cd / wc  

1.shell 流程控制 

2.shell 條件判斷

3.shell 變數

5.shell 陣列 

6.正則匹配

將兩個檔案下的指定檔案合併放置到一個新的資料夾下面

#!/bin/sh

date=0

dir1="/data/logs/d19_201606/06/selectedlogs/82/baselogs/newlogs_tmp/newlogs/"
dir2="/data/logs/d19_201606/80_advanced/"
outdir=""

for((i=1;i<=24;i++));do
	if((i<10));then
		date="0$i"
	else
		date="$i"
	fi
	#echo $date
	cat ${dir1}stm-collect.cn.miaozhen.com_201607${date}_82_new.log ${dir2}201607${date}.log  >> /data/logs/sm_new/82_new/201607${date}_82.log
done


重新命名符合條件的檔案(批處理)

#!/bin/sh
in=20160701
while(($in<20160725))
do
filename="stm-collect.cn.miaozhen.com_""$in"".log"
outname="stm-collect.cn.miaozhen.com_""$in""_.log"
mv $outname $filename
let "in++"
done

利用sed與正則替換符合條件的串

#!/bin/sh
logFile="copy_05_06.log"
date="02"
sed -i "s/[0-9]\{2\}\/\(May\|Jun\|Jul\)/$date\/Jul/g" $logFile 
grep -v "$date/Jul" $logFile     #檢驗有沒有刪除乾淨


利用grep -v 檢查日誌檔案是否有不滿足規則的行

#!/bin/sh

dir="/data/logs/d19_201606/06/ selectedlogs/82/baselogs/newlogs/"
date_count=25


sitelist=(82)

echo ${sitelist[0]} 


cd "${dir}"	#進入制定路徑

date="00"
for((i=1; i<25; i++));do
	if((i<10));then
		date="0$i"
	else
		date="$i"
	fi
	echo $date
	grep -v "${date}/Jul" *201607${date}_82_new.log >> error.log
done


========一些不太常用到的指令碼=================

==============================================

從日誌檔案中隨機選取幾條記錄寫入到另一個檔案中

版本一

#!/bin/sh
date="04"
file="copy_05_06.log"
outfile="Jul_""$date.log"


declare lines=0;    #日誌檔案中剩餘的日誌條數
function totalLines(){
	result="`wc -l $file`"  #如果想從命令中獲取資料的話,也可以用 $()
 	arr=($result)        #將結果轉換為陣列
 	lines=${arr[0]}      #獲取第0個引數,行號
 	#echo $lines         #列印總的行數	
}

sum=$(($RANDOM%8+8))	#sum記錄了隨機選取的條數
echo "lines has been selected Num:$sum"

echo "before delete: $(wc -l $file)"

for((i=0;i<$sum;i++));do
  #echo $i
  totalLines;
  #echo ${lines}
  randomline=$(($RANDOM%$lines))
  sed -n "${randomline}p" "$file"   >> $outfile  #隨機取一條資料追加到outfile
  sed -i "${randomline}d" "$file" 	#刪除被取出取的那一行
  #echo $randomline
done

echo "after delete: $(wc -l $file)"
echo "selected lines: $(wc -l $outfile)"

版本二

1、合併 cat file1 file2 > file3

2、去重 sort file3 | uniq >> file4

3、隨機抽取 shuf -n12 file4 > file5     查行數wc -l 

4、去掉a中包含b的部分

cat b.txt a.txt | sort| uniq -u >  file

隨機刪除日誌檔案中的資料(批處理方式)

#! /bin/bash  
  
rate=$((RANDOM%7+85))
indir="/mnt/hgfs/Share_Windows_Linux/"
outdir="/mnt/hgfs/Share_Windows_Linux/"

indate=(18 17 16 18 28 17 16 30 27 19)
outdate=(01 02 03 04 05 06 07 08 09 10)

cd "$indir"

num=0
for((i=0;i<10;i++));do
  cat stm-collect.cn.miaozhen.com_201606${indate[i]}_selected.log |  while read LINE 
  do
    num=$(($RANDOM%100))
    #echo ${num}
    if((${num} <= ${rate}));then
          #echo ${num}
 	  echo $LINE >> ${outdir}stm-collect.cn.miaozhen.com_201607${outdate[i]}_new.log
    fi
  done
done


awk修改cid,對原有的cid進行隨機+n操作

#!/bin/bash

sour="data.txt"
out="data_new.txt"

ct=$(wc -l $sour | awk '{print $1}')
echo "source file lines : $ct"
lines=$(( ($RANDOM%10+90)*ct/100 ))
echo "should be change lines : $lines"


awk -v num=$lines  -F'&' '
BEGIN{
	srand();
} 
{
	if(NR<=num)
	{	
		split($2,a,"=");
		ct=int(rand()*100%9);
		a[2]=a[2]+ct;
		gsub(/cid=[0-9]*/,"cid="a[2],$0);
		#$2=a[1]"="a[2];
	}
	print $0;
}
' $sour > $out

old=$(wc -l $sour | awk '{print $1}')
new=$(wc -l $out | awk '{print $1}')

echo "old file has $old lines"
echo "new file has $new lines"


相關推薦

Shell_Linux_Shell指令碼_日誌處理一些指令碼

最近博主被分配了一項緊急任務,事情有些緊急,花了兩天的時間學習Shell,並完成了一項任務.自認為還算不錯, 接下來分享下處理這個任務中所編寫的一些指令碼,就算留作紀念吧 用到的技術點 0.常用的 Linux命令  cat / grep / sed / cd / wc

開發環境 -- 在linux一個指令碼拷機

遇到一個問題,x86板卡通過PCIE外接網絡卡晶片82599,某一塊板子過一會出現網路不通的問題,排查發現某一時刻系統出現如下異常: [ 1250.888189] Uhhuh. NMI received for unknown reason 31 on CPU 0. [ 1

點雲處理一些後續問題。

一些事 才會 class 識別 空格 div 距離 出現 問題 1.在對點雲處理的步驟中,對深度沒有值的地方,對點的處理方法大部分是均為0。某些時候會出現問題,需要對這部分進行操作。(設置一個最遠的值,為了可以去掉障礙物,去不掉原因可能是 在障礙物所在的地方,在設置的最遠

nodejs在自然語言處理一些小應用

nodejs做自然語言處理是非常可行的,這次我做了一些小小的嘗試,一起來體驗一下吧。 因為還保持著對自然語言處理的那份熱愛,最近沒事的時候會把畢業論文翻出來看(畢業論文的課題就是關於自然語言處理的),然後在我的新部落格中加入了一些相關的處理,主要做了以下幾個

python資料處理一些實際問題

前段時間參加阿里天池中的智慧交通預測挑戰賽,費了不少功夫初賽排名45進入了複賽,後續沒有時間繼續複賽了,但還是想總結一下,演算法就不詳述了,具體談談資料處理的一些問題與解決方案。適合想要學習的新手參考,歡迎大家提出意見 語言使用python+pycharm 資料與部分程式碼

dljd_011_jdbc再次封裝工具類_把數據的相關信息到配置文件,減低代碼的耦合度

man 數據庫工具類 () version 數據庫配置 測試 loader connect not 一、將連接數據庫所需的相關信息寫入到配置文件、通過讀取配置文件來獲取數據庫的相關信息 package edu.aeon.aeonutils; import jav

記一次SQLSERVER 長期日誌強制斷後的處理以及反思

        因一個表中的資料從26號之後,因儲存過程的問題,資料一直抽取抽取,導致資料重複量超過有的超過了900多條。 所以,計劃刪除表中26號之後的資料,再重新抽取。        表中有一個聚集索引,一個非聚集索引。刪除之前收縮了下日誌,且停止了全部作業。刪除

sql server 還原數據,數據提示正在還原處理辦法

全備 with 使用 time 差異 backups 屬性 () logs 還原數據庫時,提示還原成功,可是數據庫列表中該數據庫顯示正在還原中: 執行此命令即可: RESTORE DATABASE EnterPriseBuilding WIT

Python日誌處理

分割 ret 其中 文件名 debug effective 處理器 日誌級別 backup 在日常項目中,總是需要記錄下一些細小信息或者錯誤碼、錯誤信息的,這個時候就需要進行日誌的操作。python中用於日誌創建、設置和記錄等功能的模塊,就是logging了,下面是對其基本

Go語言日誌處理,log包的使用

Go語言日誌 Go語言log golang日誌處理 Golang提供了原生日誌庫“log”,使用簡單方便,本文以代碼為例進行說明介紹。 package main import ( "os" "log" "fmt" ) func main() { // 打開日誌文

Python讀excel練習_去除excel亂碼行,並添加列

寫入excel continue delete val value urn com date add 需求: 把app_student.xls裏面的數據, 1、如果這一行數據裏面有亂碼(及包含?),那麽就刪掉 2、再加上一列,是否畢業 3、如果班級是天蠍座

『Python CoolBook』C擴展_其六_從C語言調用Python代碼

callable 什麽 跟著 來講 cpp iat mst 轉化 gcc 一、C語言運行pyfun的PyObject對象 思路是在C語言中提供實參,傳給python函數: 獲取py函數對象(PyObject),函數參數(C類型) 獲取GIL(PyGILState_

關於sqoop導入數據到hive數據當中,表數據為空倒入hive當中的處理

轉化 hive數據庫 是不是 技術 關於 trim 如果 col 去掉 今天在hive數據庫當中查詢一張表,查詢數據為空的值,但是死活就是匹配不到: 查詢語句如下: select * from loan_repayment_detail where trim(fact_

2.1 異常日誌_異常處理

返回 指針 傳輸 控制 run note 數據庫 message 代碼 1. 【強制】Java 類庫中定義的可以通過預檢查方式規避的 RuntimeException 異常不應該通過catch 的方式來處理,比如: NullPointerException , IndexO

.NET/C# 異常處理一個空的 try 塊程式碼,而把重要程式碼到 finally

不知你是否見過 try { } finally { } 程式碼中,try 塊留空,而只往 finally 中寫程式碼的情況呢?這種寫法有其特殊的目的。 本文就來說說這種不一樣的寫法。 你可以點開這個連結檢視 Exception 類,

【181129】VC++ GDI+程式設計必備的原始碼_各種繪圖與影象處理函式原始碼

VC++ GDI+程式設計必備的原始碼庫,包含GDI+各個方面的程式設計示例。 以下是各種功能列表: 畫筆 從畫刷中構造畫筆 自定義線型 畫筆的對齊方式 畫筆的縮放與旋轉 畫筆的線帽屬性 畫筆的透明度支援

.NET/C# 異常處理一個空的 try 塊程式碼,而把重要程式碼到 finally (Constrained Execution Regions)

不知你是否見過 try { } finally { } 程式碼中,try 塊留空,而只往 finally 中寫程式碼的情況呢?這種寫法有其特殊的目的。 本文就來說說這種不一樣的寫法。 本文內容 空的 try 塊 受約束的

mavenSSM專案啟動某個模組出現 org.springframework.beans.factory.BeanCreationException 異常的處理辦法

現在做的一個專案是有關網上商城的,當出現以下錯誤: org.springframework.beans.factory.BeanCreationException :Error creating bean with name ‘XXX’ 出現這種錯誤的原因可能有以下幾

Python自然語言處理nltk一些重要的模組

nltk庫中的一些重要的模組 ——nltk.corpus ————獲取語料庫。 ——————語料庫和詞典的標準化介面 ——nltk.tokenize,nltk.stem ————字串處理 ——————分詞,句子分解,提取主幹 ——nltk.collocation

離散傅立葉變換在影象處理的應用_學習

1、為什麼要進行傅立葉變換,其物理意義是什麼? 傅立葉原理表明:任何連續測量的時序或訊號,都可以表示為不同頻率的正弦波訊號的無限疊加。而根據該原理創立的傅立葉變換演算法利用直接測量到的原始訊號,以累加方式來計算該訊號中不同正弦波訊號的頻率、振幅和相位。 和傅立葉