Linux大檔案快速處理小方法

2022-05-03 21:06:09 字數 1326 閱讀 4187

背景

工作中使用mapreduce任務匯出一批含有路徑的檔案,共計行數300w+,需要檢測檔案是否在對應的伺服器中存在,而檔案所在的伺服器並非hadoop集群的伺服器,因此打算採用bash指令碼進行。具體的方法如下(可直接看方法2,方法1效率較低):

2. 採用的方法

a. 方法1

原本打算使用如下指令碼,進行簡單驗證:

#!/bin/bash

count=0

cat oritest.txt | while

read data

docount=$(( $count+1

))

echo

$count

dir=`echo

"$data

" | awk -f "\t"

''`

if [ -e $dir ];then

echo

"$data

" >>exist.txt

else

echo

"$data

" >>noexist.txt

fidone

原始資料格式如下:

1      name  mark        id  dir

執行時發現處理5000行需要將近4、5分鐘的時間(機器為8核),果斷不行啊,隨後打算採用多程序的方法來執行,見方法2

b. 方法2

主要是通過將大檔案分為小檔案,然後對小檔案進行後台遍歷讀取,指令碼如下:

#!/bin/bash

source ~/.bashrc

# 判斷路徑是否存在

readdata()'`

if [ -e $dir ];then

echo

"$data

" >> "

exist_$1.txt

"else

echo

"$data

" >> "

noexist_$1.txt"fi

done

}# 大檔案切分為小檔案,生成檔名為xaa,axb等(可以自己命名檔案)

split -l 10000

oritest.txt

declare -a files # 宣告陣列

files=($(ls x*)) # 分割後的小檔名儲存陣列

# 遍歷,並後台執行

for i in $;do

echo

$i readdata $i &

done

執行效率因機器效能不同而不同,使用8核的機器執行300w的資料需要十幾分鐘完成

檔案操作 linux快速建立大檔案的方法

還記得去年在準備某公司的筆試時遇到了一道題目,題目中要求 快速建立1g的大檔案 後面的要求這裡暫且就省略了。如何快速建立指定大小的大檔案呢?可能有很多種辦法,這裡提供兩種辦法。1 利用dd命令操作建立檔案 結合c語言,可以使用system函式呼叫shell命令 char shell dd if de...

PHP上傳大檔案之前檢查檔案大小方法

1.在客戶端檢查 2.在伺服器檢查 在 php.x.xx php.ini 或 應用程式的 htaccess中配置,這個缺點是上傳操作一旦提交,不可自動撤消直到上傳的檔案大小超出配置值 upload max filesize 100m max file size 100m max execution ...

linux快速生成大檔案

dd命令可以輕易實現建立指定大小的檔案,如 dd if dev zero of test bs 1m count 1000 會生成乙個1000m的test檔案,檔案內容為全0 因從 dev zero中讀取,dev zero為0源 但是這樣為實際寫入硬碟,檔案產生速度取決於硬碟讀寫速度,如果欲產生超大...