2015-05-29 103 views
0

我有一個很大的csv文件,我需要每天通過cron作業減少到最後1000行。linux cron截斷大文件

任何人都可以建議如何做到這一點?

我有什麼到目前爲止兩個命令,但不知道如何把它們

結合起來,從文件的beggining刪除線的命令是

ed -s file.csv <<< $'1,123d\nwq'

,其中123是多少需要從文件開頭刪除的行數

對於讀取文件中的行數,命令爲

wc -l file.csv 

我需要從這個減去1000,並將結果傳遞給第一個命令 有沒有什麼辦法可以在ed命令中組合wc命令的結果?

預先感謝您

+0

可能的重複[如何從文件中刪除除最後10行以外的所有內容?](http://stackoverflow.com/questions/3775383/how-can-i-remove-all-but-the-last -10-lines-from-a-file) –

+3

用途:'tail -n -1000 file> newfile; mv newfile file' – user3439894

+0

住房可以工作,但如果我可以編輯文件而不創建新文件,它會更方便。 – manolish

回答

1

假設的bash的外殼,「文件」是文件(存在):

sed -i "1,$(($(wc -l < file) - 1000))d" file 

編輯:簡短的版本上面會不會與文件清潔工作1000行或更少的行。一個更強大的腳本,處理特定目錄中的所有.csv文件:

#!/bin/env bash 

DIR=/path/to/csv/files 
N=1000 

for csv in $DIR/*.csv; do 
    L=$(wc -l < $csv) 
    [ $L -le $N ] && continue 
    sed -i "1,$(($L - $N))d" $csv 
done 

下一個編輯:處理沒有.csv文件的目錄?

+0

正是我需要的。謝謝。 – manolish

+0

是否可以循環所有.csv文件? – manolish