Linux csplit 命令實現日志文件的拆分

目錄

  • 一. 項目背景
  • 二. 通過 csplit 命令按照行數進行切割
    • 2.1 步驟分解驗證
    • 2.2 直接拆分
  • 三. 文件合并后與原文件進行diff
    • 3.1 通過 sed 命令進行合并
    • 3.2 通過 cat 命令進行合并


一. 項目背景

?需要的問題

  • 項目中需要獲取某個war產生的log文件,由于是商用環境的log,因此無法直接將log通過wincp傳輸到本地電腦中,只能通過linux命令將log文件的內容打印到控制臺上。
  • 項目要求使用Tera Term來遠程連接到商用環境,且log體積超過10MB,直接使用cat命令輸出控制臺上的話,Tera Term終端會崩潰。

?解決思路

  • 需要有一種方式來將log文件進行切割,將一個大文件切割為多個小文件,然后逐個進行cat

?通過文件體積進行切割?

  • 通過split命令,將文件按照體積進行切割,按照10MB一個的標準切割為若干個小文件。
  • 但是由于日志中含有中文,按照體積進行切割的話,很可能最后將一個漢字切割開來,最后造成亂碼。
  • 因此,通過文件體積進行切割的方式不可取。

二. 通過 csplit 命令按照行數進行切割

2.1 步驟分解驗證

?通過如下命令可以看到,文件有8.7MB,一共有86509

apluser@ubuntu24-01:~/work/20250216$ ls -lh
total 8.7M
-rw-rw-r-- 1 apluser apluser 8.7M Apr  7  2024 CBC_SystemLog.2024-04-07.0.log
apluser@ubuntu24-01:~/work/20250216$
apluser@ubuntu24-01:~/work/20250216$ wc -l CBC_SystemLog.2024-04-07.0.log
86509 CBC_SystemLog.2024-04-07.0.log

?第一次拆分,將文件拆分出整數:csplit -f CBC_SystemLog_ -b "%02d.log" CBC_SystemLog.2024-04-07.0.log 86501

  • -f CBC_SystemLog_:拆分完之后新文件的名稱前綴
  • -b "%02d.log":拆分完之后的文件的后綴格式為2位數字
  • 86501:原文件共有86509行,將原文件從86501行之后進行拆分,拆分為2個文件,分別有86500 行和9
# 將指定的文件從86501行之后拆分一次
apluser@ubuntu24-01:~/work/20250216$ csplit -f CBC_SystemLog_ -b "%02d.log" CBC_SystemLog.2024-04-07.0.log 86501
9115330
1069
apluser@ubuntu24-01:~/work/20250216$ ls -l
total 17812
-rw-rw-r-- 1 apluser apluser 9115330 Feb 16 14:48 CBC_SystemLog_00.log
-rw-rw-r-- 1 apluser apluser    1069 Feb 16 14:48 CBC_SystemLog_01.log
-rw-rw-r-- 1 apluser apluser 9116399 Apr  7  2024 CBC_SystemLog.2024-04-07.0.log
apluser@ubuntu24-01:~/work/20250216$
# 可以看到拆分完之后的文件的總行數和原文件的行數相同
apluser@ubuntu24-01:~/work/20250216$ wc -l *86500 CBC_SystemLog_00.log9 CBC_SystemLog_01.log86509 CBC_SystemLog.2024-04-07.0.log173018 total
apluser@ubuntu24-01:~/work/20250216$

?第二次拆分,將文件拆分為10的倍數:csplit -f new_log_file_prefix_ -b "%02d.log" tmp_00.log 8650 "{9}"

  • 8650 "{9}"
    • 8650:第一個分割點,表示第一個文件包含 前 8650 行,從 第 8651 行 開始一個新文件。
    • {9}:表示 重復這個分割點 9 次,即 共執行 10 次分割。
    • 總共拆分 10 次,意味著文件會被分成 11 份。
apluser@ubuntu24-01:~/work/20250216$ csplit -f new_log_file_prefix_ -b "%02d.log" CBC_SystemLog_00.log 8650 "{9}"
937375
919866
875569
955326
901752
890427
935403
876211
946443
876837
121
apluser@ubuntu24-01:~/work/20250216$ ls -lh new_log_file_prefix_*
-rw-rw-r-- 1 apluser apluser 916K Feb 16 14:59 new_log_file_prefix_00.log
-rw-rw-r-- 1 apluser apluser 899K Feb 16 14:59 new_log_file_prefix_01.log
-rw-rw-r-- 1 apluser apluser 856K Feb 16 14:59 new_log_file_prefix_02.log
-rw-rw-r-- 1 apluser apluser 933K Feb 16 14:59 new_log_file_prefix_03.log
-rw-rw-r-- 1 apluser apluser 881K Feb 16 14:59 new_log_file_prefix_04.log
-rw-rw-r-- 1 apluser apluser 870K Feb 16 14:59 new_log_file_prefix_05.log
-rw-rw-r-- 1 apluser apluser 914K Feb 16 14:59 new_log_file_prefix_06.log
-rw-rw-r-- 1 apluser apluser 856K Feb 16 14:59 new_log_file_prefix_07.log
-rw-rw-r-- 1 apluser apluser 925K Feb 16 14:59 new_log_file_prefix_08.log
-rw-rw-r-- 1 apluser apluser 857K Feb 16 14:59 new_log_file_prefix_09.log
-rw-rw-r-- 1 apluser apluser  121 Feb 16 14:59 new_log_file_prefix_10.log

?通過行數比對,可以看到拆分后的總行數和原文件的行數相同

apluser@ubuntu24-01:~/work/20250216$ wc -l new_log_file_prefix_* CBC_SystemLog_01.log8649 new_log_file_prefix_00.log8650 new_log_file_prefix_01.log8650 new_log_file_prefix_02.log8650 new_log_file_prefix_03.log8650 new_log_file_prefix_04.log8650 new_log_file_prefix_05.log8650 new_log_file_prefix_06.log8650 new_log_file_prefix_07.log8650 new_log_file_prefix_08.log8650 new_log_file_prefix_09.log1 new_log_file_prefix_10.log9 CBC_SystemLog_01.log86509 total
apluser@ubuntu24-01:~/work/20250216$ wc -l CBC_SystemLog.2024-04-07.0.log
86509 CBC_SystemLog.2024-04-07.0.log
apluser@ubuntu24-01:~/work/20250216$

2.2 直接拆分

?設置9個分割點,共拆分10次,會產生11個拆分文件

apluser@ubuntu24-01:~/work/20250216$ csplit -f new_log_file_prefix_ -b "%02d.log" CBC_SystemLog.2024-04-07.0.log 8650 "{9}"
937375
919866
875569
955326
901752
890427
935403
876211
946443
876837
1190
apluser@ubuntu24-01:~/work/20250216$ wc -l new_log_file_prefix_*8649 new_log_file_prefix_00.log8650 new_log_file_prefix_01.log8650 new_log_file_prefix_02.log8650 new_log_file_prefix_03.log8650 new_log_file_prefix_04.log8650 new_log_file_prefix_05.log8650 new_log_file_prefix_06.log8650 new_log_file_prefix_07.log8650 new_log_file_prefix_08.log8650 new_log_file_prefix_09.log10 new_log_file_prefix_10.log86509 total

三. 文件合并后與原文件進行diff

?我們可以通過將拆分后的文件合并為一個文件和原文件進行diff比較,從而驗證我們的拆分是沒有問題的。
注意,一定要按照順序來合并文件,否則diff的時候會出現差分。

3.1 通過 sed 命令進行合并

  • sed '''' 代表空命令,即 sed 不會對文本執行任何修改,只會原樣輸出文件內容。
apluser@ubuntu24-01:~/work/20250216$ sed '' new_log_file_prefix_*.log CBC_SystemLog_01.log > merged_log_file.log
apluser@ubuntu24-01:~/work/20250216$
apluser@ubuntu24-01:~/work/20250216$ diff merged_log_file.log CBC_SystemLog.2024-04-07.0.log
apluser@ubuntu24-01:~/work/20250216$

3.2 通過 cat 命令進行合并

  • 💥通常情況下cat的合并速度更快,盡量使用cat命令
apluser@ubuntu24-01:~/work/20250216$ cat new_log_file_prefix_*.log CBC_SystemLog_01.log > merged_log_file_tmp.log
apluser@ubuntu24-01:~/work/20250216$
apluser@ubuntu24-01:~/work/20250216$ diff merged_log_file_tmp.log CBC_SystemLog.2024-04-07.0.log
apluser@ubuntu24-01:~/work/20250216$

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/895906.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/895906.shtml
英文地址,請注明出處:http://en.pswp.cn/news/895906.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【EndNote】WPS 導入EndNote 21

寫在前面:有沒有人有激活碼,跪求! EndNote,在文獻管理和文獻引用方面很好用。寫文章的時候,使用EndNote引入需要的文獻會很方便。我目前用的WPS,想把EndNote的CWYW(Cite While You Write&#…

嵌入式0xDEADBEEF

在嵌入式系統中,0xDEADBEEF 是一個常見的“魔數”(magic number),通常用于調試和內存管理。它的含義和用途如下: 1. 調試用途 未初始化內存的標記:在調試時,0xDEADBEEF 常用于標記未初始化或已…

RT-Thread+STM32L475VET6實現紅外遙控實驗

文章目錄 前言一、板載資源介紹二、具體步驟1. 確定紅外接收頭引腳編號2. 下載infrared軟件包3. 配置infrared軟件包4. 打開STM32CubeMX進行相關配置4.1 使用外部高速時鐘,并修改時鐘樹4.2 打開定時器16(定時器根據自己需求調整)4.3 打開串口4.4 生成工程 5. 打開HW…

【HarmonyOS Next】鴻蒙應用進程和線程詳解

【HarmonyOS Next】鴻蒙應用進程和線程詳解 一、前言 進程的定義: 進程是系統進行資源分配的基本單位,是操作系統結構的基礎。 在鴻蒙系統中,一個應用下會有三類進程: (1) 主進程, (2) ExtensionAbility進程&#xff…

迪威模型網:免費暢享 3D 打印盛宴,科技魅力與趣味創意并存

還在為尋找優質3D打印模型而發愁?快來迪威模型網(https://www.3dwhere.com/),一個集前沿科技與無限趣味于一體的免費3D打印寶藏平臺! 踏入迪威模型網,仿佛開啟一場未來科技之旅。其“3D打印”專區&#xff…

力扣LeetCode: 1287 有序數組中出現次數超過25%的元素

題目: 給你一個非遞減的 有序 整數數組,已知這個數組中恰好有一個整數,它的出現次數超過數組元素總數的 25%。 請你找到并返回這個整數 示例: 輸入:arr [1,2,2,6,6,6,6,7,10] 輸出:6提示: …

一文看常見的消息隊列對比

一、核心特性對比表 維度KafkaRabbitMQRocketMQPulsar架構設計分布式日志系統,依賴ZooKeeper基于AMQP協議的代理模型主從架構NameServer協調分層架構(BrokerBookKeeper)單機吞吐量100萬 TPS5萬 TPS50萬 TPS150萬 TPS消息延遲毫秒級&#xff…

Ubuntu USB耳機找不到設備解決

? 一. 確定硬件連接 lsusb -t 插拔USB耳機,確定是否有USB識別到 二. 查看輸出設備 sudo apt-get install pavucontrol pavucontrol 點擊想要使用的輸出設備后面的綠色選項 三. 輸出設備沒有USB耳機時調試 3.1 確認ALSA是否識別設備 列出ALSA播放設備&#…

[筆記.AI]如何判斷模型是否通過剪枝、量化、蒸餾生成?

以下摘自與DeepSeek-R1在線聯網版的對話 一、基礎判斷維度 技術類型核心特征驗證方法剪枝模型參數減少、結構稀疏化1. 檢查模型參數量是否顯著小于同類標準模型1 2. 分析權重矩陣稀疏性&#xff08;如非零參數占比<30%&#xff09;4量化權重/激活值精度降低、推理速度提升1…

Redis如何解決熱Key問題

目錄 **如何解決 Redis 的熱 Key&#xff08;Hot Key&#xff09;問題&#xff1f;****解決方案** **1. 使用多級緩存****方案** **2. 進行 Key 預分片&#xff08;Key Sharding&#xff09;****方案** **3. 使用 Redis 復制機制&#xff08;主從復制或集群&#xff09;****方案…

云計算架構學習之Ansible-playbook實戰、Ansible-流程控制、Ansible-字典循環-roles角色

一、Ansible-playbook實戰 1.Ansible-playbook安裝軟件 bash #編寫yml [rootansible ansible]# cat wget.yml - hosts: backup tasks: - name: Install wget yum: name: wget state: present #檢查playbook的語法 [rootansible ansible]…

【Web前端開發精品課 HTML CSS JavaScript基礎教程】第二十四章課后題答案

文章目錄 問題1&#xff1a;問題2&#xff1a;問題3&#xff1a; 問題1&#xff1a; 在HTML中嵌入JavaScript&#xff0c;應該使用的標簽是&#xff08; &#xff09;。 選項&#xff1a; A. <style></style> B. <script></script> C. <js><…

用python進行二分法查找(python實例三十)

目錄 1.認識Python 2.環境與工具 2.1 python環境 2.2 Visual Studio Code編譯 3.代碼示例 4.運行結果 1.認識Python Python 是一個高層次的結合了解釋性、編譯性、互動性和面向對象的腳本語言。 Python 的設計具有很強的可讀性&#xff0c;相比其他語言經常使用英文關鍵…

Qt學習(五)自定義對話框,多窗口開發---添加設計師類, MDI多窗口開發

一 對話框 實現功能&#xff1a;打開文件&#xff0c;選擇目錄&#xff0c;保存文件&#xff0c;選擇顏色&#xff0c;選擇字體&#xff0c;輸入信息&#xff0c; 消息提示框 #ifndef MAINWINDOW_H #define MAINWINDOW_H#include <QMainWindow>QT_BEGIN_NAMESPACE na…

用 Python 實現簡易的 Web 爬蟲:從入門到實戰

一、引言 在信息爆炸的時代,網絡上蘊含著海量的數據。如果我們想要獲取特定的信息,手動從網頁上復制粘貼顯然效率極低。這時,Web 爬蟲就派上了用場。Web 爬蟲是一種自動獲取網頁內容的程序,它可以模擬人類在瀏覽器中的操作,快速地抓取網頁上的數據。本文將帶領大家使用 Py…

機器視覺檢測中,2D面陣相機和線掃相機的區別

2D面陣相機和線掃相機是工業視覺系統中常用的兩種相機類型&#xff0c;各有其特點和應用場景。 2D面陣相機 特點&#xff1a; 成像方式&#xff1a;通過二維傳感器一次性捕捉整個場景的圖像。 分辨率&#xff1a;分辨率由傳感器的像素數決定&#xff0c;常見的有百萬像素到幾千…

ECharts極簡入門

ECharts 是一個基于 JavaScript的開源可視化圖表庫&#xff0c;廣泛應用于數據可視化的場景中&#xff0c;支持多種圖表類型&#xff0c;如柱狀圖、折線圖、餅圖、散點圖、雷達圖等&#xff0c;且具有強大的自定義功能。 1. ECharts 基本使用 首先需要引入 ECharts 庫&#xf…

go設置鏡像代理

前言 在 Go 開發中&#xff0c;如果直接從官方源&#xff08;https://proxy.golang.org&#xff09;下載依賴包速度較慢&#xff0c;可以通過設置 鏡像代理 來加速依賴包的下載。以下是增加 Go 鏡像代理的詳細方法&#xff1a; 一、設置 Go 鏡像代理 1. 使用環境變量設置代理…

Linux部署DeepSeek r1 模型訓練

之前寫過一篇windows下部署deepseekR1的文章&#xff0c;有小伙伴反饋提供一篇linux下部署DeepSeek r1 模型訓練教程&#xff0c;在 Linux 環境下&#xff0c;我找了足夠的相關資料&#xff0c;花費了一些時間&#xff0c;我成功部署了 DeepSeek R1 模型訓練任務&#xff0c;結…

AI Agent架構深度解析:從ReAct到AutoGPT,自主智能體的技術演進與工程實踐

前言 覺得不錯就點個贊吧&#xff01;。 一、AI Agent技術架構演進圖譜 &#xff08;配圖&#xff1a;AI Agent架構演進時間軸&#xff0c;標注關鍵技術節點&#xff09; 1.1 三代架構對比分析 架構類型代表系統核心特征局限性反應式DeepBlue預置規則庫無長期記憶認知式Wats…